博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C_求最大连续子序列和
阅读量:5738 次
发布时间:2019-06-18

本文共 2861 字,大约阅读时间需要 9 分钟。

题目:

输入一组整数,求出这组数字子序列和中最大值。也就是只要求出最大子序列的和,不必求出最大的那个序列。例如:

序列:-2 11 -4 13 -5 -2,则最大子序列和为20。

序列:-6 2 4 -7 5 3 2 -1 6 -9 10 -2,则最大子序列和为16。

 

1.

1 /* 2     算法一:穷举法(3个for) 3             时间复杂度:O(n^3) 4  5 */ 6 #include 
7 #include
8 9 int Max = 0;10 int find_max(int len, int arr[]){11 int i, j, k, sum;12 for(i=0; i
Max){19 Max = sum;20 }21 }22 }23 return Max;24 25 } 26 27 int main(){28 int i, len, *arr;29 printf("请输入数组的长度: ");30 scanf("%d",&len);31 arr = (int *)malloc(sizeof(int)*len);32 printf("请输入数组的值:");33 for(i=0; i

2.

 

1 /* 2     算法二:算法一的优化 (2个for) 3             时间复杂度:O(n^2) 4 */ 5 #include 
6 #include
7 8 int Max = 0; 9 int find_max(int arr[],int n, int len){10 int i, sum = 0;11 for(i=n; i
Max){14 Max = sum ; 15 }16 }17 return Max;18 } 19 20 int main(){21 int i, len, *arr;22 printf("请输入数组的长度:");23 scanf("%d",&len);24 arr = (int *)malloc(sizeof(int)*len);25 printf("请输入数组的值:");26 for (i=0; i

 将代码进行以下修改,可以得到该最大子序列和的开始元素和结束元素(low,high)

1 int find_max(int len, int arr[]){ 2     int i, j, sum, low, high; 3     for(i=0; i
Max){ 8 Max = sum; 9 low = i;10 high = j;11 }12 }13 }14 printf("The low is :%d\nThe high is : %d\n",arr[low],arr[high]);15 return Max;16 }

 

 

3.

1 /* 2     算法三:联机算法 3     时间复杂度:O(n) 4 */ 5 #include 
6 #include
7 8 int Max = 0; 9 int find_max(int len, int arr[])10 {11 int i, sum = 0;12 for(i=0; i
Max)16 {17 Max = sum;18 }else if(sum < 0){19 sum = 0;20 } 21 }22 23 return Max;24 }25 26 int main(){27 int i, len, *arr;28 printf("请输入数组的长度:");29 scanf("%d",&len);30 arr = (int *)malloc(sizeof(int)*len);31 printf("请输入数组的值:");32 for (i=0; i

对以上代码进行小的改动,通过生成一系列的随机数进行测试程序运行的时间,由于程序运行的很快,需要通过重复循环取平均值的方法得到程序执行一次的时间。参考:http://www.cnblogs.com/LinSL/p/7475001.html

1 #include 
2 #include
3 #include
4 #include
5 6 clock_t start,stop; 7 double duration; 8 9 void fun(int len,int arr[]);10 11 int main(){12 int len, *arr, i;13 printf("Please enter the len:");14 scanf("%d",&len);15 arr = (int*)malloc(sizeof(int)*len);17 for(i=0; i
max){35 max = sum;36 }else if(sum < 0){37 sum = 0;38 }39 }40 printf("The max_sum is:%d\n",max);41 }

 

参考:http://blog.163.com/kevinlee_2010/blog/static/169820820201010495438247/

 

转载于:https://www.cnblogs.com/LinSL/p/7412489.html

你可能感兴趣的文章
Node.js Undocumented(1)
查看>>
《R语言数据挖掘》----1.16 练习
查看>>
《树莓派渗透测试实战》——2.7 设置SSH服务
查看>>
用 ThreadLocal 管理用户session
查看>>
C语言及程序设计进阶例程-28 动态规划法问题求解
查看>>
setprecision后是要四舍五入吗?
查看>>
shiro初步 shiro授权
查看>>
上云就是这么简单——阿里云10分钟快速入门
查看>>
韵达:首家物流云企业的大规模云上调度实践
查看>>
Spark修炼之道(高级篇)——Spark源码阅读:第十二节 Spark SQL 处理流程分析
查看>>
小团队拥有大能量 三十个年轻人的创业故事
查看>>
Python编写小工具之统计演员票房排行榜
查看>>
透过Wi-Fi计算室内人数?最新人工智能研究技术
查看>>
vue+cordova项目打包实现跨平台开发(一)
查看>>
教育部相关负责人:建人工智能一级学科增加研究生招生指标
查看>>
“Unexpected end of JSON input while parsing near···”错误解决方案
查看>>
一篇文章搞懂Android组件化!
查看>>
经典排序算法及其 Java 实现
查看>>
go语言有哪些好的debug方法?
查看>>
Swift 从View跳转页面+实用技巧
查看>>