最大子数组和

Problem: ***********

今日头条Android开发一面算法题

时间复杂度:O(n)

class Solution {
    public int maxSubArray(int[] nums) {
        //总结:这里使用到了动态规划算法的思想:先求解重叠子问题的解并存储,以便下一个子问题求解之时直接查表
        
        //res为最大子数组之和
        int res=nums[0];
        //存储每一阶段求得的res
        ArrayList<Integer> list=new ArrayList<>();
        for(int i=1;i<nums.length;i++){
            //在进行下一步操作的时候,要先保存当前的res
            list.add(res);
            //如果前面的连续子数组之和加当前索引下数字的和小于当前索引下数字,
            //这表示前面连续的子数组和为负数那么就没有留下的必要了,直接从当前数字开始取新的子数组
            if((res+nums[i])<nums[i]){
                res=nums[i];             
            }else{
                //反之,将当前索引下数字加入到该子数组中
                System.out.println(res);
                res=nums[i]+res;
            }
        }
        //存入最后一次的res
        list.add(res);
        //最后返回的是list里面res快照的最大值
            res=Collections.max(list);
            return res;
    }
}

#刷题#
全部评论

相关推荐

09-19 14:12
武汉大学 golang
并没有发笔试,只是顺延了两次,去看官网发现流程结束了
无敌忍耐王:三个工作日没人捞就自动结束了
投递美团等公司10个岗位
点赞 评论 收藏
分享
09-19 21:21
已编辑
福州大学 嵌入式工程师
可爱的牛油果在求佛:再给你说一点,之前我的简历像流水账,当时我在面试的时候,面试官说:“你简历上的都是在调包吗?有自己的改进吗?如果没有改进直接调包的话,我觉得没什么可深挖的”。当时给我整懵了。其实大部分确实是在调包,因为我确实就用到这些简单的技术,如果只是把技术要点写在简历上,那没什么好说的,没意思,没什么深挖的。但是调包与调包之间仍存在区别,那就是自己的思考,如果你不把自己的困难摆出来,人家觉得就是简单的调包,有啥难的。其实只有你自己知道这个项目的难点在哪,只有你自己知道为什么要用这个技术,为什么要调这个包,而你需要展示的,不是技术,而是这个“为什么”,这是关键。所以,当你的技术不是很硬核的时候,就要突出自己的思考,这时候“思考”是难点,而当你的简历很硬核,技术很复杂时,技术本身就是难点。
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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