class Solution {
public:
int minOperations(vector<int>& nums) {
}
};
100346. 使二进制数组全部等于 1 的最少操作次数 II
给你一个二进制数组 nums
。
你可以对数组执行以下操作 任意 次(也可以 0 次):
i
,并将从下标 i
开始一直到数组末尾 所有 元素 反转 。反转 一个元素指的是将它的值从 0 变 1 ,或者从 1 变 0 。
请你返回将 nums
中所有元素变为 1 的 最少 操作次数。
示例 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]
。示例 2:
输入:nums = [1,0,0,0]
输出:1
解释:
我们可以执行以下操作:
i = 1
执行操作,得到 nums = [1,1,1,1]
。
提示:
1 <= nums.length <= 105
0 <= nums[i] <= 1
相似题目
原站题解
javascript 解法, 执行用时: 4 ms, 内存消耗: 58.8 MB, 提交时间: 2024-10-19 14:06:38
/** * @param {number[]} nums * @return {number} */ var minOperations = function(nums) { let ans = nums[0] ^ 1; for (let i = 1; i < nums.length; i++) { ans += nums[i - 1] ^ nums[i]; } return ans; }; var minOperations2 = function(nums) { let k = 0; for (const x of nums) { if (x === k % 2) { // 必须操作 k++; } } return k; };
rust 解法, 执行用时: 0 ms, 内存消耗: 2.6 MB, 提交时间: 2024-10-19 14:06:10
impl Solution { pub fn min_operations(nums: Vec<i32>) -> i32 { let mut k = 0; for x in nums { if x == k % 2 { // 必须操作 k += 1; } } k } pub fn min_operations2(nums: Vec<i32>) -> i32 { let mut ans = nums[0] ^ 1; for i in 1..nums.len() { ans += nums[i - 1] ^ nums[i]; } ans } }
python3 解法, 执行用时: 97 ms, 内存消耗: 20.5 MB, 提交时间: 2024-06-27 22:32:20
class Solution: def minOperations(self, nums: List[int]) -> int: ans = 0 for x in nums: if x == ans % 2: ans += 1 return ans
golang 解法, 执行用时: 138 ms, 内存消耗: 8.4 MB, 提交时间: 2024-06-27 22:32:05
func minOperations(nums []int) (ans int) { for _, x := range nums { if x == ans%2 { ans++ } } return }
java 解法, 执行用时: 9 ms, 内存消耗: 55.5 MB, 提交时间: 2024-06-27 22:31:52
class Solution { public int minOperations(int[] nums) { int ans = 0; for (int x : nums) { if (x == ans % 2) { ans++; } } return ans; } }
cpp 解法, 执行用时: 108 ms, 内存消耗: 151.3 MB, 提交时间: 2024-06-27 22:31:38
class Solution { public: int minOperations(vector<int>& nums) { int ans = 0; for (int x : nums) { ans += x == ans % 2; } return ans; } };