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]
目录
相关文章
|
4月前
|
Java
leetcode-491:递增子序列
leetcode-491:递增子序列
21 0
|
7月前
|
算法
【学会动态规划】最大子数组和(19)
【学会动态规划】最大子数组和(19)
24 0
|
4月前
|
Java
leetcode-53:最大子序和
leetcode-53:最大子序和
20 0
|
4月前
|
算法 Python
leetcode-189:旋转数组
leetcode-189:旋转数组
18 0
|
算法 Java Python
【LeetCode】 53. 最大子序和(动态规划)
53. 最大子序和(动态规划)
77 0
【LeetCode】 53. 最大子序和(动态规划)
|
算法
leetcode 53 最大子数组和
leetcode 53 最大子数组和
42 0
leetcode 53 最大子数组和
leetcode 491递增子序列
leetcode 491递增子序列
34 0
leetcode 491递增子序列
|
机器学习/深度学习 测试技术
【LeetCode】最大子数组和
【LeetCode】最大子数组和
【LeetCode】最大子数组和
|
算法
LeetCode 189. 旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
52 0