classSolution{ funmaxSubarraySumCircular(nums: IntArray): Int { val n = nums.size if (n == 0) return0 if (n == 1) return nums[0]
fungetMaxSumInLinearCase(): Int { var maxSum = nums[0] var pre = 0 for (i in0 until n) { val cur = maxOf(pre + nums[i], nums[i]) maxSum = maxOf(maxSum, cur) pre = cur } return maxSum }
fungetMinSumInCyclicCase(): Int { var pre = 0 var minSum = nums[1] for (i in1..(n - 2)) { val cur = minOf(pre + nums[i], nums[i]) minSum = minOf(minSum, cur) pre = cur } return minSum }