Leetcode # 918. Maximum Sum Circular Subarray
- 2022.02.13
- Kadane’s Algorithm LeetCode
https://leetcode.com/problems/maximum-sum-circular-subarray/
Solution
我們想在「circular array
版本的A」中找其maximum sum Subarray
令 B = -A ,只要 A 減去「 B 的maximum sum Subarray
」就是答案
注意題目的限制:maximum sum Subarray
必須是non-empty
故 len(B) 必須小於 len(A) – 1
int: if len(nums) == 1: return nums[0] def kadane(nums): max_ending_here = max_so_far = nums[0] for num in nums[1:]: max_ending_here = max(num, max_ending_here + num) max_so_far = max(max_so_far, max_ending_here) return max_so_far nums_sum = sum(nums) neg_nums = [-num for num in nums] return max(kadane(nums), \ nums_sum + kadane(neg_nums[1:]), nums_sum + kadane(neg_nums[:-1]))
我一開始發生的邏輯錯誤
一開始我的想法是
「在nums * 2
中使用Kadane's algorithm
在子序列
max_ending_here
長度超過len(nums)
時
消去子序列
max_ending_here
第一個元素及其後連續的非正整數(0和負數)」
但正確的做法是
「在子序列max_ending_here
長度超過len(nums)
時
消去子序列
max_ending_here
第一個元素
並且繼續向後尋找要消除多少個前方連續元素才能使
max_ending_here
最大
然而這會使得 Time Complexity 多達 O(len(nums) ^ 2)」
Last Updated on 2023/08/16 by A1go