class Solution { public: int maxSubarraySumCircular(vector<int>& nums) { int len = nums.size(); int local_max = 0; int global_max = INT_MIN; int total_sum = 0;
for (int i = 0; i < len; i++) { local_max = max(nums[i], nums[i] + local_max); global_max = max(local_max, global_max); total_sum += nums[i]; } //对于环形的数组,总和一定,总和减去最小的子数组和就是最大子数组和 int min_wrap = INT_MAX; int current_sum = 0; for (int i = 0; i < len; ++i) { current_sum = min(nums[i], nums[i] + current_sum); min_wrap = min(min_wrap, current_sum); } int max_wrap = total_sum - min_wrap; // 重新计算 max_wrap