当前位置: 首页 > 编程笔记 >

C语言连续子向量的最大和及时间度量实例

干茂才
2023-03-14
本文向大家介绍C语言连续子向量的最大和及时间度量实例,包括了C语言连续子向量的最大和及时间度量实例的使用技巧和注意事项,需要的朋友参考一下

本文实例分析了C语言连续子向量的最大和及时间度量,分享给大家供大家参考之用。具体方法如下:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define SCALE 3000
int maxnum(int a, int b);
int main(int argc, char const *argv[])
{
 FILE *fp;
 fp = fopen("maximum.in", "r");
 // int x[] = {1,12,-11,10,-65,54,22,-9,21,5,48,5,-8,-2,56,54,-88,-5,2,-8,554,-56,35,-55,555,-65,-545,-23,48,-5,88,-56,16,-8};
 int *x = (int *)malloc(sizeof(int)*(SCALE+1));
 int xi = SCALE,a = 0,num_in = 0;
 while(xi--){
  fscanf(fp, "%d", &x[a++]);
 }
 clock_t start, end;

 // ***Algorithm-1 cube***
 start = clock();

 int max = 0;
 int length = SCALE;
 int i,j,k;
 for (i = 0; i < length; ++i)
 {
  for (j = i; j < length; ++j)
  {
   int sum = 0;
   for (k = i; k <= j; ++k)
   {
    sum += x[k];
   }
   max = maxnum(max, sum);
  }
 }
 
 // long num = 10000000L;
 // while(num--);

 end = clock();
 double times = (double)(end - start)/CLOCKS_PER_SEC;
 double dend = (double)end;
 printf("\n***Algorithm-1 cube***\n");
 printf("end: %f\n", dend);
 printf("Time consuming: %f\n", times);
 printf("%d\n", max);
 // ***Algorithm-2 square***
 start = clock();
 max = 0;
 for (i = 0; i < length; ++i)
 {
  int sum = 0;
  for (j = i; j < length; ++j)
  {
   sum += x[j];
   max = maxnum(max, sum);
  }
 }
 end = clock();
 times = (double)(end - start)/CLOCKS_PER_SEC;
 dend = (double)end;
 printf("\n***Algorithm-2 square***\n");
 printf("end: %f\n", dend);
 printf("Time consuming: %f\n", times);
 printf("%d\n", max);
 // ***Algorithm-3 linear***
 start = clock();
 max = 0;
 int max_end_here = 0;

 for (i = 0; i < length; ++i)
 {
  max_end_here = maxnum(max_end_here + x[i], 0);
  max = maxnum(max, max_end_here);
 }
 end = clock();
 times = (double)(end - start)/CLOCKS_PER_SEC;
 dend = (double)end;
 printf("\n***Algorithm-3 linear***\n");
 printf("end: %f\n", dend);
 printf("Time consuming: %f\n", times);
 printf("%d\n", max);
 free(x);
 x = NULL;
 return 0;
}
int maxnum(int a, int b)
{
 return a > b ? a : b;
}

感兴趣的朋友可以测试运行一下本文实例以加深理解。希望本文所述对大家C程序设计的学习有所帮助。

 类似资料:
  • 本文向大家介绍求一个数组中连续子向量的最大和相关面试题,主要包含被问及求一个数组中连续子向量的最大和时的应答技巧和注意事项,需要的朋友参考一下 考察点:数组    

  • 本文向大家介绍C语言实现最大间隙问题实例,包括了C语言实现最大间隙问题实例的使用技巧和注意事项,需要的朋友参考一下 本文实例展示了C语言实现最大间隙问题的方法,对于算法的设计有一定的借鉴价值。分享给大家供大家参考。具体如下: 问题描述如下: 给定n个实数x1,x2,...,xn,求这n个实数在实轴上相邻2个数之间的最大差值,要求设计线性的时间算法。 解决思路: 注意题中要求设计线性时间算法。如果没

  • 嗨,我目前正试图暗示一个OptaPlanner解决方案,我有困难与语法的2个规划变量。这些值是某个范围的连续加倍,该范围需要在解求解之前动态设置。 我已经看了以下2个网站,并很难看到他们应该如何实施。 请有人让我知道这应该如何实施。范围的值可以是0到n之间的任何值。 谢了。

  • 我在桌子下面。“月份”列表示每个客户已下订单的数量。我想计算连续0的最大数目。 因此结果表将为: 我知道有一个窗口函数可以处理行的连续0,但不确定如何处理列。

  • 主要内容:创建矢量,访问向量元素,向量操作向量是最基本的R数据对象,有六种类型的原子向量。它们分别是逻辑,整数,双重,复杂,字符和原始。 创建矢量 1.单元素矢量 即使在R中只写入一个值,它也会被认为是一个长度为的向量,属于上述向量类型之一。 当我们执行上述代码时,会产生以下结果 - 2.多元素向量 使用冒号运算符与数字数据 - 当我们执行上述代码时,会产生以下结果 - 使用序列(Seq.)运算符 当我们执行上述代码时,会产生以下结果 -

  • NowCoder 题目描述 {6, -3, -2, 7, -15, 1, 2, 2},连续子数组的最大和为 8(从第 0 个开始,到第 3 个为止)。 解题思路 // java public int FindGreatestSumOfSubArray(int[] nums) { if (nums == null || nums.length == 0) return 0;