首页 > 试题广场 >

环形数组的连续子数组最大和

[编程题]环形数组的连续子数组最大和
  • 热度指数:665 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度为 n环形整数数组 nums ,返回 nums非空 连续子数组 的最大可能和 。
环形数组 意味着数组的末端将会与开头相连呈环状。例如, 的前一个数是
数据范围:



示例1

输入

[6,-3,6]

输出

12

说明

从子数组 [6,6] 得到最大和 6 + 6 = 12 
示例2

输入

[4,-2,2,-4]

输出

4

说明

从子数组 [4] 和 [4,-2,2] 都可以得到最大和 4 
import java.util.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型ArrayList
     * @return int整型
     */
    public int maxSubarraySumCircular (ArrayList<Integer> nums) {
        // write code here
        int sum = 0;
        int max = nums.get(0);
        int prev = 0;
        for (int i = 0; i < nums.size(); i++) {
            sum += nums.get(i);  //顺便计算数组总和
            prev = Math.max(prev + nums.get(i), nums.get(i));
            max = Math.max(max, prev);
        }
        prev = 0;
        int min = nums.get(0);
        for (int i = 0; i < nums.size(); i++) {
            prev = Math.min(prev + nums.get(i), nums.get(i));
            min = Math.min(min, prev);
        }
        if (sum != min) {
            max = Math.max(max, sum - min);
        }
        return max;  //当最小子数组为整个数组时,sum-min会导致结果为0,因此这种情况就无需比较max和sum-min,直接返回max即可
    }
}

发表于 2025-01-02 21:32:07 回复(0)

问题信息

难度:
1条回答 560浏览

热门推荐

通过挑战的用户

查看代码
环形数组的连续子数组最大和