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...
    夏天再来阅读 3,408评论 0 2
  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 13,738评论 0 89
  • 分治策略 本文包括分治的基本概念二分查找快速排序归并排序找出伪币棋盘覆盖最大子数组 源码链接:https://gi...
    廖少少阅读 1,903评论 0 7
  • 对于 D 题的原题意,出题人和验题人赛前都没有发现标算存在的问题,导致了许多选手的疑惑和时间的浪费,在此表示真诚的...
    _Carryon阅读 269评论 0 0
  • 计算机二级C语言上机题库(南开版) 1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平...
    MrSunbeam阅读 6,464评论 1 42