标签:
【题目】输入一个整型数组,数组里有正数也有负数。数组中一个或连续多个整数组成一个子数组。
* 求所有子数组和的最大值。
* 【思路】连续求和数组元素。一旦得到的和小于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 }
标签:
原文地址:http://www.cnblogs.com/noaman/p/5637875.html