连续子数组最大和

连续子数组的最大和

http://www.nowcoder.com/questionTerminal/459bd355da1549fa8a49e350bf3df484

Java题解;
看着简单,也改了很多次条件

public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        int maxCur = 0; // 保存返回的结果
        if(array.length == 0){
            return maxCur;
        }

        int totalNum = 0;  // 保存从某个位置为起点累加所有的数,得到的和
        for(int i=0; i<array.length; i++){
            // 最大连续子序列的和不一定从第一个元素开始算起
            // 当前面的数之和小于当前元素,并且前面数的和为负数时,将当前元素作为新的起点
            if(totalNum < array[i] && totalNum < 0){   // *** 这个条件改了很多次
                maxCur = array[i];
                totalNum = array[i];
            }else{
                totalNum += array[i];
                if(totalNum > maxCur){
                    maxCur = totalNum;
                }
            }
        }
        return maxCur;
    }
}
全部评论
totalNum < array[i] && totalNum < 0这个判断语句中不加totalNum < array[i]可以吗 我试了试也行啊~~~??
点赞 回复 分享
发布于 2019-08-28 20:30
这个算法有缺陷啊  按照牛客给我例子能通过  不过兄弟你试一下{1,-2,3,4,5,6,-20,8}    这个连续最大应该是3+4+5+6=18,但是按程序跑出来是8
点赞 回复 分享
发布于 2019-08-28 20:44
public class Solution {     public static int FindGreatestSumOfSubArray(int[] array) {         int maxCur = 0; // 保存返回的结果         if(array.length == 0){             return 0;         }else {   // -2,-8,-1,-5,-9 解决全为负数的时候,maxCur不能为0 的问题   ****修改1*******          maxCur = array[0];         }                  //         int totalNum = maxCur;  // 保存从某个位置为起点累加所有的数,得到的和                  for(int i=1; i<array.length; i++){             // 最大连续子序列的和不一定从第一个元素开始算起             // 当前面的数之和小于当前元素,当前最大值取“下一个元素”与“原最大值”之间的较大者          // ---------------------------------------------------             if(totalNum < 0){   // ****修改2*******               maxCur = Math.max(array[i], maxCur);                 totalNum = array[i];   // 只要原起点到当前位置的数字和小于0,就更新totalNum,即更新起点             }else{                 totalNum += array[i];                 if(totalNum > maxCur){  // 最新的起点到当前位置的和>原来的最大值时,更新最大值                     maxCur = totalNum;                 }             }             // ----------------------------------------------------         }         return maxCur;     }     /**     public static void main(String[] args) {      int result = FindGreatestSumOfSubArray(new int[]{1,2,3,4,5}); // -2,-8,-1,-5,-9 //  1,-2,3,4,5,6,-20,8      System.out.println(result);     }     */ }
点赞 回复 分享
发布于 2019-08-28 21:40
大家注意,这个代码有bug,请用 {5,-7,-2,1} 测试。正确代码如下: public static int FindGreatestSumOfSubArray2(int[] array) { int total = array[0]; int max = array[0]; for(int i = 1; i<array.length; i++){ if(total < array[i] && total < 0){ total = array[i]; max = array[i]; }else { total += array[i]; if(total > max){ max = total; } } } return max; }
点赞 回复 分享
发布于 2019-09-10 19:48

相关推荐

11-15 18:39
已编辑
西安交通大学 Java
全村最靓的仔仔:卧槽,佬啥bg呢,本也是西交么
点赞 评论 收藏
分享
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务