剑指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 }
原文地址:https://www.cnblogs.com/noaman/p/5637875.html