剑指offer第31题 连续子数组最大和

#include<iostream>
using namespace std;

int maxsum(int *list,int i)
{
    if(list==NULL||i<=0)
        return -1;
    int cursum=0;
    int maxsum=0;//假设最小可以是0个数字
    for(int j=0;j<i;j++)
    {
        if(cursum<=0)
            cursum=list[j];
        else cursum=cursum+list[j];
        if(cursum>maxsum)
            maxsum=cursum;
    }
    return maxsum;
}

int main()
{
    int a[1000];
    int i=0;
    int c;
    while(cin>>c)
    {
        a[i]=c;
        i++;
        if(cin.get()==‘\n‘)
            break;
    }
    cout<<maxsum(a,i);
}
时间: 2024-12-25 23:06:44

剑指offer第31题 连续子数组最大和的相关文章

【剑指offer】42、连续子数组的最大和

题目 输入一个整型数组,数组里有正数也有负数.数组的一个或连续多个整数组成一个子数组.求所有子数组的最大和.要求时间复杂度为O(n) 思路一 试着从头到尾累加每个数字,若发现有子数组和小于零,则加上后面的数字肯定会变小 因此丢弃这组子数组,从后面一个数字开始重新累加 例如{1,-2,3,10,-4,7,2,-5} 1+(-2)=-1 3+10-4+7+2=18 3+10-4+7+2-5=13 因此是18 需要注意的是,记录最大值的初始值要设置成INT_MIN,因为最大值可能是负数. class

剑指offer 30.时间效率 连续子数组的最大和

题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止).给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1) 错误解法: public class FindG

【剑指offer】Q31:连续子数组的组大和

简短的分析见:http://blog.csdn.net/shiquxinkong/article/details/17934747 def FindGreatestSumOfSubArray(array, index = None): curSum = 0 maxSum = 0 #return maxSum without the start and end index if index == None: for x in array: curSum = max(curSum, 0) curSu

剑指offer 面试31题

面试31题: 题目:栈的压入.弹出元素 题:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) 解题思路:链接 解题代码: # -*- coding:utf-8 -*- class Solution: def IsPopOrder(self, push

《剑指offer》刷题目录

<剑指offer>刷题目录 面试题03. 数组中重复的数字 面试题04. 二维数组中的查找 面试题05. 替换空格 面试题06. 从尾到头打印链表 面试题07. 重建二叉树 原文地址:https://www.cnblogs.com/qujingtongxiao/p/12652970.html

剑指Offer系列之题11~题15

目录 11.矩形覆盖 12.二进制中1的个数 13. 数值的整数次方 14.调整数组顺序使奇数位于偶数前面 15.链表中倒数第k个结点 11.矩形覆盖 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法: 斐波那契数列的应用 第一次竖着放一块类比为走一步,第一次横着放两块类比为走两步 代码与上面的斐波那契数列类题目类似,此处不再赘述:剑指Offer系列之题6~题10. 12.

Maximum Subarray 连续子数组最大和

Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [−2,1,−3,4,−1,2,1,−5,4],the contiguous subarray [4,−1,2,1] has the largest sum = 6. More practice: If you have figur

连续子数组最大和(转)

求一个数组的相加和最大的连续子数组 思路: 一直累加,只要大于0,就说明当前的“和”可以继续增大, 如果小于0了,说明“之前的最大和”已经不可能继续增大了,就从新开始, result=max{result+arr[i],arr[i]};显然,若result>0,则可以继续相加,否则,就重新开始. #include<stdio.h> #define INF 65535 int Maxsum(int * arr, int size) { int maxSum = -INF; int sum

【剑指Offer学习】【面试题31:连续子数组的最大和】

题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n). 例子说明: 例如输入的数组为{1, -2, 3, 10, -4, 7, 2, -5},和最大的子数组为{3, 10, -4, 7, 2}.因此输出为该子数组的和18 . 解题思路: 解法一:举例分析数组的规律. 我们试着从头到尾逐个累加示例数组中的每个数字.初始化和为0.第一步加上第一个数字1, 此时和为1.接下来第二步加上数字-2,和就变成了-1.第三步