美文网首页
LeetCode 第918题:环形子数组的最大和

LeetCode 第918题:环形子数组的最大和

作者: 放开那个BUG | 来源:发表于2024-05-01 13:21 被阅读0次

1、前言

题目描述

2、思路

主要是一个转换问题,有两个case,case1是连续子数组都在数组中;
case2 是连续子数组是首尾相连。所以要将 case2转换一下,求最大和,其实就是求 总和 - 中间部分最小和。


图解

3、代码

class Solution {
    public int maxSubarraySumCircular(int[] nums) {
        int n = nums.length;
        int sumMax = 0, max = Integer.MIN_VALUE, sumMin = 0, min = Integer.MAX_VALUE;
        int sum = 0;
        for(int i = 0; i < n; i++){
            sum += nums[i];

            // 最大和
            sumMax += nums[i];
            max = Math.max(max, sumMax);
            if(sumMax < 0){
                sumMax = 0;
            }

            // 最小和
            sumMin += nums[i];
            min = Math.min(min, sumMin);
            if(sumMin > 0){
                sumMin = 0;
            }
        }


        return sum - min == 0 ? max : Math.max(max, sum - min);
    }
}

相关文章

网友评论

      本文标题:LeetCode 第918题:环形子数组的最大和

      本文链接:https://www.haomeiwen.com/subject/drlnxjtx.html