环形数组 意味着数组的末端将会与开头相连呈环状。例如, 的前一个数是 。
数据范围:
[6,-3,6]
12
从子数组 [6,6] 得到最大和 6 + 6 = 12
[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即可 } }