2025-01-22:使二进制数组全部等于 1 的最少操作次数Ⅱ。用 go 语言,给定一个二进制数组 nums,你可以对数组进行以下操作任意次(包括 0 次): 选择任何一个下标 i,并将从该下标开始到数组末
2025-01-22:使二进制数组全部等于 1 的最少操作次数Ⅱ。用 go 语言,给定一个二进制数组 nums,你可以对数组进行以下操作任意次(包括 0 次):
选择任何一个下标 i,并将从该下标开始到数组末尾的所有元素进行反转。反转的意思是将 0 变为 1,或将 1 变为 0。
请计算将 nums 数组中的所有元素都变为 1 所需的最少操作次数。
1 <= nums.length <= 100000。
0 <= nums[i] <= 1。
输入:nums = [0,1,1,0,1]。
输出:4。
解释:
我们可以执行以下操作:
选择下标 i = 1 执行操作,得到 nums = [0,0,0,1,0] 。
选择下标 i = 0 执行操作,得到 nums = [1,1,1,0,1] 。
选择下标 i = 4 执行操作,得到 nums = [1,1,1,0,0] 。
选择下标 i = 3 执行操作,得到 nums = [1,1,1,1,1] 。
答案 2025-01-22:
题目来自 leetcode3192。
大体步骤如下:
1.初始数组是 [0, 1, 1, 0, 1]
,初始操作次数 ops = 0
。2.在遍历过程中,根据当前元素和操作次数的奇偶性来决定是否增加操作次数。3.遍历到第一个元素 0,此时操作次数为偶数,所以需要进行反转,此时数组变为 [1, 1, 1, 0, 1]
,操作次数加 1。4.继续遍历,下一个元素为 1,此时操作次数为奇数,不需要进行反转,操作次数不变。5.遍历到下一个元素 1,仍然不需要反转,操作次数不变。6.下一个元素为 0,操作次数为奇数,需要进行反转,此时数组变为 [1, 1, 1, 1, 0]
,操作次数加 1。7.最后一个元素是 1,操作次数为偶数,需要进行反转,此时数组变为 [1, 1, 1, 1, 1]
,操作次数加 1。
最终的操作次数为 4,将数组中所有元素变为 1 需要进行 4 次操作。
总的时间复杂度:遍历数组需要 O(n) 的时间复杂度,其中 n 是数组的长度。
总的额外空间复杂度:在解决问题的过程中,只使用了常数级别的额外空间,额外空间复杂度为 O(1)。
Go 完整代码如下:
Rust 完整代码如下:
python 完整代码如下:
solidity 完整代码如下:
版权声明: 本文为 InfoQ 作者【福大大架构师每日一题】的原创文章。
原文链接:【http://xie.infoq.cn/article/04fb19120d232fc866f5927b7】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论