剑指offer系列56---连续子数组的最大和

【题目】输入一个整型数组,数组里有正数也有负数。数组中一个或连续多个整数组成一个子数组。
* 求所有子数组和的最大值。
* 【思路】连续求和数组元素。一旦得到的和小于0,就抛弃前面的数组,从当前值重写开始求和。

 1 package com.exe11.offer;
 2
 3 /**
 4  * 【题目】输入一个整型数组,数组里有正数也有负数。数组中一个或连续多个整数组成一个子数组。
 5  *             求所有子数组和的最大值。
 6  * 【思路】连续求和数组元素。一旦得到的和小于0,就抛弃前面的数组,从当前值重写开始求和。
 7  *
 8  * @author WGS
 9  *
10  */
11 public class FindGreatestSumOfSubArray {
12
13     boolean invalidInput=false;//使用一个全局变量标志数组非法输入情况,区别此时返回的0值和正常情况得到的0值
14     public int getMaxVal(int[] nums){
15         if(nums==null ||nums.length <=0){
16             invalidInput=true;
17             return 0;
18         }
19         //invalidInput=false;//不知道为什么要重新设置为false
20         int curSum=0;
21         int maxSum=0x80000000;//整型数最小值
22         for(int i=0;i<nums.length;i++){
23             if(curSum>=0){
24                 curSum+=nums[i];
25             }else{
26                 curSum=nums[i];
27             }
28             //
29             if(curSum>maxSum)
30                 maxSum=curSum;
31         }
32         return maxSum;
33
34     }
35
36     public static void main(String[] args) {
37         FindGreatestSumOfSubArray f=new FindGreatestSumOfSubArray();
38         //int[] nums=new int[]{1,-2,3,10,-4,7,2,-5};
39         //int[] nums=new int[]{1,2,3};
40         //int[] nums=new int[]{-1,-2,-3};
41         int[] nums=new int[]{};
42         int n=f.getMaxVal(nums);
43         System.out.println(n);
44     }
45
46 }
时间: 2025-01-06 03:24:23

剑指offer系列56---连续子数组的最大和的相关文章

剑指offer 66题 -- 连续子数组的最大和

class Solution {public: int FindGreatestSumOfSubArray(vector<int> array) { int maxNum =0x80000000; int curNum = 0; for(int i=0; i<array.size(); i++) { if(curNum <= 0) curNum = array[i]; else curNum += array[i]; if(curNum > maxNum) maxNum =

剑指OFFER----面试题42. 连续子数组的最大和

链接:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof/submissions/ 代码: class Solution { public: int maxSubArray(vector<int>& nums) { int res = INT_MIN, s = 0; for (auto x: nums) { if (s < 0) s = 0; s += x; res = max(res, s);

剑指offer-面试题42-连续子数组的最大和-动态规划

/*题目; 输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和. 要求时间复杂度为O(n). 先输入数组的格式,再依次输入数组的值.*//*思路: f(i) = pData[i](i=0或f(i-1)<0),f(i-1)+pData[i](f(i-1)>0且i!=0)*/#include<iostream>#include<string.h>#include<stdio.h>#include<set>#includ

剑指offer系列源码-最大子向量和(连续子数组的最大和)

题目1372:最大子向量和(连续子数组的最大和) 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2169解决:570 题目描述: HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天JOBDU测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)

剑指Offer对答如流系列 - 连续子数组的最大和

面试题42:连续子数组的最大和 题目描述 输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整/数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n). 问题分析 输入数组{1.-2.10.-4.7.2.-5} 很容易看出从第一个数字开始累加,若走到某一个数字时,前面的累加和为负数,说明不能继续累加了.比如1 和 -2累加后值为-1,后面的数字加上-1反而变小了,应舍弃.要从接下来的数字重新开始累加.注意在累加过程中,将每次累加和的最大值记录下来,遍历完成后,返回该数字

剑指OFFER之最大子向量和(连续子数组的最大和)(九度OJ1372)

题目描述: HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天JOBDU测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止).你会不会被他忽悠住? 输入: 输入有多组数据,每组测试数据包括两行. 第一行为一个整数n(0<=n<=100000),当

剑指Offer:连续子数组的最大和

题目: 输入一个整型数组, 数组里有正数也有负数. 数组中的一个或连续的多个整数组成一个子数组. 求所有子数组的和的最大值. 要求时间复杂度为O(n) #include <stdio.h> int maxsum_subarray(int a[], int n) { if( a==NULL || n<=0 ) { printf("Error.\n"); return 0x80000000; } int i; int curmax = 0x80000000; int cu

剑指Offer面试题:28.连续子数组的最大和

一.题目:连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).例如输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和18. 这个题目在我去年参加校园招聘时,某公司的二面采用了机试,而题目刚好就是这道题.一般看到这道题目就会想到枚举出数组的所有子数组并求出它们的和.一个长度为n的数组,总共有n(n+1)/2个子数组.计算

剑指offer面试题31连续子数组的最大和

一.题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止).你会不会被他忽悠住? 二.解题思路 求连续子数组的最大和,首先想的到最笨的方法就是暴力解决,两个for循环,遍历数组找到和最大的子