Cracking the coding interview--Q19.7

来源:互联网 发布:office for 破解mac 编辑:程序博客网 时间:2024/05/17 22:37

题目

原文:

You are given an array of integers (both positive and negative). Find the continuous sequence with the largest sum. Return the sum.

EXAMPLE

Input: {2, -8, 3, -2, 4, -10}

Output: 5 (i.e., {3, -2, 4} )

译文:

给出一个整型数组(包括正负数),找出和最大的子序列,并返回该值。

解答

遍历一遍数组,用变量maxsum保存遍历过程中的最大和, 用变量cursum保存遍历过程中的当前和。在遍历的过程中,我们只需要做3件事, 第一:如果当前和cursum小于等于0,说明前面的连续和不会对后面的连续和产生贡献, 要么使后面的连续和减少,要么不变。因此舍弃cursum,用当前的元素更新它。 第二:如果当前和cursum是大于0的,累加当前元素。第三:如果当前和cursum 大于最大和maxsum,则更新最大和maxsum。

class Q19_7{public static boolean g_invalid=false;public static void main(String[] args){int[] a={2,-8,3,-2,4,-10};int max_sum=getMaxSum(a);if(g_invalid)System.out.println("Invalid Input!");elseSystem.out.println(max_sum);}public static int getMaxSum(int[] a,int n){if(a==null||n<=0){g_invalid=true;return 0;}g_invalid=false;int max_sum=1<<31;int cur_sum=0;for(int i=0;i<n;++i){if(cur_sum<=0)cur_sum=a[i];elsecur_sum+=a[i];if(cur_sum>max_sum)max_sum=cur_sum;}return max_sum;}//method2, but if the array is all negative numbers, can't use this methodpublic static int getMaxSum(int[] a){int maxsum=0;int sum=0;for(int i=0;i<a.length;i++){sum+=a[i];if(maxsum<sum){maxsum=sum;}else if(sum<0){sum=0;}}return maxsum;}}

注:当序列全部是负数时,就不能采用以上的方法了。

---EOF---

0 0
原创粉丝点击