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: 输入数据有 ...
随机推荐
- JAVA-ORM框架整理➣Mybatis操作MySQL
概述 在Java中,对数据库操作的框架很多,上节概述Hibernate的简单使用,这里简单整理Mybatis的使用.Mybatis也是简单的数据库操作框架,通过IOC方式,获取操作类对象,进行数据的操 ...
- codeforces 1037
题解: E-trips 哎哎哎好傻逼啊 没有想到算不能的一直在想怎么算能的 太傻逼了 其实很简单 我们只需要对好友<=k的首先dfs一下给他连接着的朋友-1 然后如果小于了就递归下去 这个正确性 ...
- Derive representation formula from Green’s identity
This article introduces how to derive the representation formula used in BEM from Green's identity. ...
- Kafka/Zookeeper集群的实现(二)
[root@kafkazk1 ~]# wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12. ...
- mysql配置完半同步复制之后报错[ERROR] The server quit without updating PID file
修改配置,MySQL启动报:[ERROR] The server quit without updating PID file [root@localhost mysql]# /etc/init.d/ ...
- 分布式配置hadoop2.5.0 2.6.x
1. sudo vim /etc/hostname 在master的机器上,改成 master 在slave上写 slave01,02,03...... 配置好后重启. 2. sudo vi ...
- PHP页面间传值的几种方法
方法一:require_once //Page a: <?php $a = "hello"; ?> //Page b: <?php require_once &q ...
- 函数对象的call()、apply() 方法区别
函数对象的call().apply() 方法 函数作为对象提供了call(),apply() 方法,他们也可以用来调用函数,这两个方法都接受一个对象作为参数,用来指定本次调用时函数中this的指向: ...
- Codeforces 1009G Allowed Letters FMT,二分图,二分图匹配,霍尔定理
原文链接https://www.cnblogs.com/zhouzhendong/p/CF1009G.html 题目传送门 - CF1009G 题意 给定一个长度为 $n$ 的字符串 $s$ .并给定 ...
- 12306登录爬虫 session版本
import requests import re import base64 # 定义session headers = { 'User-Agent':'Mozilla/5.0 (Windows N ...