1. 解题思路
这一题的话就是一个动态规划,我们使用两个数组one和zero分别记录将所有元素变为1或者0时所需要的操作数目,具体来说,one[i]
表示将从第i个元素开始全变为1所需要的操作次数,同理,zero[i]
表示将从第i个元素开始全变为0所需要的操作次数。
此时即有递推关系:
- 如果第i个元素为0
one[i] = 1 + zero[i+1]
zero[i] = zero[i+1]
- 如果第i个元素为1
one[i] = one[i+1]
zero[i] = 1 + one[i+1]
我们返回one[0]
即为目标答案。
2. 代码实现
给出python代码实现如下:
class Solution:
def minOperations(self, nums: List[int]) -> int:
n = len(nums)
zero = [0 for _ in range(n+1)]
one = [0 for _ in range(n+1)]
for i in range(n-1, -1, -1):
if nums[i] == 0:
zero[i] = zero[i+1]
one[i] = 1 + zero[i+1]
else:
zero[i] = 1 + one[i+1]
one[i] = one[i+1]
return one[0]
提交代码评测得到:耗时1160ms,占用内存23.2MB。