C_求最大连续子序列和
题目:
输入一组整数,求出这组数字子序列和中最大值。也就是只要求出最大子序列的和,不必求出最大的那个序列。例如:
序列:-2 11 -4 13 -5 -2,则最大子序列和为20。
序列:-6 2 4 -7 5 3 2 -1 6 -9 10 -2,则最大子序列和为16。
1.
/*
算法一:穷举法(3个for)
时间复杂度:O(n^3) */
#include <stdio.h>
#include <malloc.h> int Max = ;
int find_max(int len, int arr[]){
int i, j, k, sum;
for(i=; i<len; i++){
for(j=i; j<len; j++){
sum = ;
for(k=i; k<=j; k++){
sum += arr[k];
}
if(sum > Max){
Max = sum;
}
}
}
return Max; } int main(){
int i, len, *arr;
printf("请输入数组的长度: ");
scanf("%d",&len);
arr = (int *)malloc(sizeof(int)*len);
printf("请输入数组的值:");
for(i=; i<len; i++){
scanf("%d",&arr[i]);
}
find_max(len,arr);
printf("最大连续子序列和 :%d\n", Max ); return ;
}
2.
/*
算法二:算法一的优化 (2个for)
时间复杂度:O(n^2)
*/
#include <stdio.h>
#include <malloc.h> int Max = ;
int find_max(int arr[],int n, int len){
int i, sum = ;
for(i=n; i<len; i++){
sum += arr[i];
if(sum > Max){
Max = sum ;
}
}
return Max;
} int main(){
int i, len, *arr;
printf("请输入数组的长度:");
scanf("%d",&len);
arr = (int *)malloc(sizeof(int)*len);
printf("请输入数组的值:");
for (i=; i<len; i++)
{
scanf("%d", &arr[i]);
} for(i=; i<; i++){
find_max(arr,i, len);
} printf("最大连续子序列和:%d \n",Max); return ;
}
将代码进行以下修改,可以得到该最大子序列和的开始元素和结束元素(low,high)
int find_max(int len, int arr[]){
int i, j, sum, low, high;
for(i=; i<len; i++){
sum = ;
for(j=i; j<len; j++){
sum += arr[j];
if(sum > Max){
Max = sum;
low = i;
high = j;
}
}
}
printf("The low is :%d\nThe high is : %d\n",arr[low],arr[high]);
return Max;
}
3.
/*
算法三:联机算法
时间复杂度:O(n)
*/
#include <stdio.h>
#include <malloc.h> int Max = ;
int find_max(int len, int arr[])
{
int i, sum = ;
for(i=; i<len; i++)
{
sum += arr[i];
if(sum > Max)
{
Max = sum;
}else if(sum < ){
sum = ;
}
} return Max;
} int main(){
int i, len, *arr;
printf("请输入数组的长度:");
scanf("%d",&len);
arr = (int *)malloc(sizeof(int)*len);
printf("请输入数组的值:");
for (i=; i<len; i++)
{
scanf("%d", &arr[i]);
}
find_max(len, arr);
printf("最大连续子序列和:%d \n",Max);
return ;
}
对以上代码进行小的改动,通过生成一系列的随机数进行测试程序运行的时间,由于程序运行的很快,需要通过重复循环取平均值的方法得到程序执行一次的时间。参考:http://www.cnblogs.com/LinSL/p/7475001.html
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h> clock_t start,stop;
double duration; void fun(int len,int arr[]); int main(){
int len, *arr, i;
printf("Please enter the len:");
scanf("%d",&len);
arr = (int*)malloc(sizeof(int)*len); for(i=; i<len; i++){
arr[i] = rand()%-;/*产生-1000~1000之间的随机数*/
printf("%d ",arr[i]);
}
printf("\n");
start = clock();
fun(len,arr);
stop = clock();
duration = ((double)(stop - start))/CLK_TCK;
printf("The duration is:%f\n",duration);/*0.0000*/
return ;
} void fun(int len,int arr[]){
int max=,
sum=,
i;
for(i=; i<len; i++){
sum += arr[i];
if(sum > max){
max = sum;
}else if(sum < ){
sum = ;
}
}
printf("The max_sum is:%d\n",max);
}
参考:http://blog.163.com/kevinlee_2010/blog/static/169820820201010495438247/
C_求最大连续子序列和的更多相关文章
- HDU 1081 To the Max 最大子矩阵(动态规划求最大连续子序列和)
Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any ...
- HDU 1231:最大连续子序列 解题报告
第一次写博客, 自己总结写出了一道题感觉值得保存. 自己总结的规律:求最大连续子序列, 可以先求包括第N项在内的前N项最大值, (因为每一项都求过后, 前N项最大值最大的那一个元素所连续的序列即为最大 ...
- dp经典问题-最大连续子序列和 hdu1003
题目描述: 这道题我先后做过三遍,结果每一遍都没有做出来.今天再仔仔细细的研究了一下,才发现用动态规划更好理解. 关于求最大连续子序列和的博文转载如下:https://www.cnblogs.com/ ...
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] E 三分+连续子序列的和的绝对值的最大值
E. Weakness and Poorness time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- Educational Codeforces Round 63 (Rated for Div. 2) D dp(最大连续子序列)
https://codeforces.com/contest/1155/problem/D 题意 一个n个数的数组\(a[i]\),可以选择连续的一段乘x,求最大连续子序列的值 题解 错误思路:贪心, ...
- 《github一天一道算法题》:分治法求数组最大连续子序列和
看书.思考.写代码. /*************************************** * copyright@hustyangju * blog: http://blog.csdn. ...
- K:求取数组中最大连续子序列和的四个算法
相关介绍: 求取数组中最大连续子序列和问题,是一个较为"古老"的一个问题.该问题的描述为,给定一个整型数组(当然浮点型也是可以的啦),求取其下标连续的子序列,且其和为该数组的所有 ...
- 最大连续子序列乘积(DP)
题目来源:小米手机2013年校园招聘笔试题 题目描述: 给定一个浮点数序列(可能有正数.0和负数),求出一个最大的连续子序列乘积. 输入: 输入可能包含多个测试样例.每个测试样例的第一行仅包含正整数 ...
- [ACM_其他] 总和不小于S的连续子序列的长度的最小值——尺缩法
Description: 给定长度为n的整数数列,A[0],A[1],A[2]….A[n-1]以及整数S,求出总和不小于S的连续子序列的长度的最小值.如果解不存在,则输出0. Input: 输入数据有 ...
随机推荐
- IIS7 禁止目录运行脚本
早晨看博客说有人被黑了:http://www.cnblogs.com/sanshi/p/3150639.html 看回复建议禁用上传目录的脚本运行权限 在IIS6上还是比较容易的,直接右键--属性,把 ...
- JSP中out.print()、out.println()以及out.write()的区别
out是JSP九大内置对象之一,是JspWriter的一个对象,JspWriter继承了java.io.Writer类. out.print()和out.write() print()和println ...
- vscode插件篇
Document This 注释插件 能够自动识别function中的参数 Ctrl + alt + D
- [HNOI2007]梦幻岛宝珠
题解: 一道比较好的题目 首先比较显然的就是我们要按照a*2^b的b的顺序来枚举 那么状态f[i][j]表示当前在b,用了a*2^b 刚开始没想到怎么不同层之间搞 看了题解发现非常简单 由于每一层到最 ...
- 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡
题解: 网上有一种复杂的方法..好像复杂度并没有优势就没看 定义f[i]表示i的期望经过次数,f[i]=sigma{f[j]*p/q/du[j]}+(i==1); 然后高斯消元就可以了 最后求出来的f ...
- 流程图 Graphviz - Graph Visualization Software
0.目录 1.参考 https://www.processon.com/ 应该值得一试 知乎 用什么软件画流程图? 9款国内外垂直领域的在线作图工具[可代替visio] 程序员必知的七个图形工具 说 ...
- 在 Xshell 中 使用 hbase shell 进入后 无法删除 问题
在 Xshell 中 使用 hbase shell 进入后 无法删除 问题: 在hbase shell下,误输入的指令不能使用backspace和delete删除,使用过的人都知道,这是有多坑,有多苦 ...
- nginx 域名泛解析
部分应用场景下要求服务器根据客户输入的二级域名地址自动访问不同的页面,比如一个服务器放置了不同的业务,商城.官网等多个业务,又不想一个个配置server, 网站目录结构入戏: html 网站根目录 m ...
- Zabbix监控Tomcat案例
今天在这里,我们来聊一聊JMX监控方式, JMX(java管理扩展程序)是java平台上为应用程序,设备,系统等植入管理功能的框架,JMX可以跨越一系列不同的系统平台,更加灵活的服务管理应用: 在za ...
- [转,讲的非常精彩]CIDR地址块及其子网划分(内含原始IP地址分类及其子网划分的介绍)
http://blog.csdn.net/dan15188387481/article/details/49873923 CIDR地址块及其子网划分(内含原始IP地址分类及其子网划分的介绍) 1. ...