连续子数组最大和

连续子数组的最大和

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;
    }
}
全部评论
大家注意,这个代码有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
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
这个算法有缺陷啊  按照牛客给我例子能通过  不过兄弟你试一下{1,-2,3,4,5,6,-20,8}    这个连续最大应该是3+4+5+6=18,但是按程序跑出来是8
点赞 回复 分享
发布于 2019-08-28 20:44
totalNum < array[i] && totalNum < 0这个判断语句中不加totalNum < array[i]可以吗 我试了试也行啊~~~??
点赞 回复 分享
发布于 2019-08-28 20:30

相关推荐

有很多问题,求大佬们解答,谢谢大佬们:不知道现在该怎么投实习,该怎么准备内心很纠结学校课程和实习到底怎么选择,&nbsp;自己也不想课程学业这边出问题,&nbsp;是不是只能投暑期实习,具体时间该怎么安排前端面试也需要准备算法么,&nbsp;自己的算法能力很薄弱,&nbsp;面试题需要准备到什么程度?没有ai项目经验的话,我该如何去补充,如何去找好的ai项目
smile丶snow:1.简历尽量一页,比如教育经历那里,全日制,计算机学院这些可以去掉没啥用好浪费空间。 熟悉三件套就没必要写了吧。js基本上是这样写 * JavaScript核心:深入理解 JS 运行机制(事件循环 Event Loop、微任务/宏任务),熟练掌握 Promise/Async 异步编程 模型。 熟悉可以改成熟练掌握。组件库写一个ant感觉就行,多写了浪费空间。 旅游项目是不是jonas的natours啊,我之前简历也有这个。我之前是这样写的 全栈思维: 熟悉 Node.js/Express 后端架构,掌握 MongoDB 数据库设计与聚合查询 工程化我觉得还是少些吧,不写就问的少,如果你真的了解的话可以写。 1.实习的话推荐大厂官网和aoob上面投,我自己有写一个校招网站的小网站可以直达~github主页上面有,顺便求个关注( 2.大三下一般课程比较少了吧,如果学校比较严的话可以多沉淀一会,如果不太严可以请dai课然后去实习,尽量找个近一些的就行。暑期实习不是暑假才实习哦,基本是上3月底4月初发offer就可以过去了,然后大概暑假的时候走转正流程答辩。 3.大厂算法题+js手写体。hot100+常见的比如数组转树,Promise.all,deepClone,之类 js手写都不难其实。算法看自己能力吧,我其实算法能力也不行。 4.自己平时没有用AI Coding吗?自己想一下怎么让AI帮你更好的写代码~比如Skill的诞生,OpenSpec的诞生,不都是我们想让AI更好帮我们写代码吗。
我的实习日记
点赞 评论 收藏
分享
点赞 评论 收藏
分享
1jian10:48h没写面评会变成这样
点赞 评论 收藏
分享
找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务