Minimum swaps to group all 1s together II
November 1, 2022
sliding-windowProblem URL: Minimum swaps to group all 1s together II
We will count number of ones in nums, let the number of ones be stored in the variable ones. Append nums to nums because we have to look at it as a circular array. Find the maximum number of ones in a window of size ones in the new array. Number of swaps = ones - maximum number of ones in a window of size ones.
class Solution:
def minSwaps(self, nums: List[int]) -> int:
ones, n = nums.count(1), len(nums)
x, onesInWindow = 0, 0
for i in range(n * 2):
if i >= ones and nums[i % n - ones]:
x -= 1
if nums[i % n] == 1:
x += 1
onesInWindow = max(x, onesInWindow)
return ones - onesInWindow
Time complexity: O(n)
Space complexity: O(1)