LeetCode 53 Kadane's algorithm

刷LeetCode 53题的时候,想不出来O(n)复杂度的解,上网去搜,发现了这个算法,专门来求最大子序列的和,算法就是考虑,数组中的A[I]前面的的序列段的和为sum,如果sum大于等于零,那么加上A[i],如果sum小于零,就没有必要加了,不如直接保留A[i],这样就相当于从A[i]开始的一个新的数字段。保留一个max保存最大的值,每次都和max比较。

class Solution {
        public int maxSubArray(int[] nums) {
            int max = Integer.MIN_VALUE, sum = 0;
            for (int i = 0;i < nums.length; i++) {
                if (sum <= 0) sum = nums[i];
                else sum = sum + nums[i];
                if (max < sum) max = sum;

            }
            return max;
        }
    }

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 1,672评论 0 2
  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 11,856评论 0 88
  • 分治策略 本文包括分治的基本概念二分查找快速排序归并排序找出伪币棋盘覆盖最大子数组 源码链接:https://gi...
    廖少少阅读 1,053评论 0 6
  • 计算机二级C语言上机题库(南开版) 1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平...
    MrSunbeam阅读 4,182评论 1 42
  • 2012年12月10 昨天思琪最后一节课请假回家打流感疫苗,我去学校提前接她。等了一会看见思琪从校园里背着...
    琪琪爸爸_eee6阅读 29评论 0 1