53_最大子序和

简介: 53_最大子序和

53_最大子序和

 

package 数组;
/**
 * https://leetcode-cn.com/problems/maximum-subarray/
 * @author Huangyujun
 * 思路:在某个变量之前的tmp_sum 如果是大于 0的,则之前这部分tmp_sum 要保留下来
 * 题意:找到一个具有最大和的连续子数组
 * 
解释一下:这道题目为什么不使用双指针:假如使用双指针,初始化:left = 0, right = nums.length - 1;
while(left < right): 更新和,这时候应该移动左指针还是右指针呢(题意没给呀)题意没给暗示指针走向,导致指针移动不确定呀
 * 
 * 
 * 
思路:遍历数组sums:
① 如果当前是nums[i] + 原积累的前 i - 1 个元素的和, 比 nums[i] 还 大,(这里也说明了 原积累的前 i - 1 个元素的和 是大于 0 的 )
     则选择 积累
     否则 从 当前的 nums[i] 开始,重新积累
② 遍历过程不断的更新当前的记录的最大值max_sum
 *
 */
public class _53_最大子序和 {
    public int maxSubArray(int[] nums) {
        int max_sum = nums[0];
        int sum = 0;
        int tmp_sum = 0;
        int len = nums.length;
        for(int i = 0; i < len; i++) {
            //当前计算得到的最大tmp_sum
            tmp_sum = Math.max(tmp_sum + nums[i], nums[i]);
            //更新记录中的最大max_sum
//            if(max_sum < tmp_sum) {
//                max_sum = tmp_sum;
//            }
            max_sum = Math.max(tmp_sum, max_sum);
        }
        return max_sum;
    }
}
//class Solution {
//    public int maxSubArray(int[] nums) {
//        int pre = 0, maxAns = nums[0];
//        for (int x : nums) {
//            pre = Math.max(pre + x, x);
//            maxAns = Math.max(maxAns, pre);
//        }
//        return maxAns;
//    }
//}
//[-2,1,-3,4,-1,2,1,-5,4]
//[1,2,-1,-2,2,1,-2,1,4,-5,4]
目录
相关文章
|
8月前
|
算法
并查集,路径压缩
并查集,路径压缩
51 0
|
8月前
并查集。。
并查集。。
41 0
|
8月前
|
Java
leetcode-53:最大子序和
leetcode-53:最大子序和
46 0
|
8月前
|
机器学习/深度学习
并查集(UnionFind)总结
并查集(UnionFind)总结
78 0
|
存储 算法 iOS开发
并查集详解及应用
并查集详解及应用
3861 0
|
算法 Java Python
【LeetCode】 53. 最大子序和(动态规划)
53. 最大子序和(动态规划)
101 0
【LeetCode】 53. 最大子序和(动态规划)
|
算法 Java 测试技术
【LeetCode】 53. 最大子序和(贪心算法)
53. 最大子序和(贪心算法)
99 0
|
测试技术
最大子序和(LeetCode-53)
最大子序和(LeetCode-53)
91 0
最大子序和(LeetCode-53)
|
机器学习/深度学习 算法
LeetCode打卡 52八皇后Ⅱ&53最大子序和&54螺旋矩阵
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
141 0
LeetCode打卡 52八皇后Ⅱ&53最大子序和&54螺旋矩阵