100344. 使二进制数组全部等于 1 的最少操作次数 I
给你一个二进制数组 nums
。
你可以对数组执行以下操作 任意 次(也可以 0 次):
反转 一个元素指的是将它的值从 0 变 1 ,或者从 1 变 0 。
请你返回将 nums
中所有元素变为 1 的 最少 操作次数。如果无法全部变成 1 ,返回 -1 。
示例 1:
输入:nums = [0,1,1,1,0,0]
输出:3
解释:
我们可以执行以下操作:
nums = [1,0,0,1,0,0]
。nums = [1,1,1,0,0,0]
。nums = [1,1,1,1,1,1]
。示例 2:
输入:nums = [0,1,1,1]
输出:-1
解释:
无法将所有元素都变为 1 。
提示:
3 <= nums.length <= 105
0 <= nums[i] <= 1
相似题目
原站题解
javascript 解法, 执行用时: 115 ms, 内存消耗: 59 MB, 提交时间: 2024-10-18 09:06:28
/** * @param {number[]} nums * @return {number} */ var minOperations = function(nums) { const n = nums.length; let ans = 0; for (let i = 0; i < n - 2; i++) { if (nums[i] === 0) { // 必须操作 nums[i + 1] ^= 1; nums[i + 2] ^= 1; ans++; } } return nums[n - 2] && nums[n - 1] ? ans : -1; };
rust 解法, 执行用时: 27 ms, 内存消耗: 2.6 MB, 提交时间: 2024-10-18 09:06:14
impl Solution { pub fn min_operations(mut nums: Vec<i32>) -> i32 { let n = nums.len(); let mut ans = 0; for i in 0..n - 2 { if nums[i] == 0 { // 必须操作 nums[i + 1] ^= 1; nums[i + 2] ^= 1; ans += 1; } } if nums[n - 2] != 0 && nums[n - 1] != 0 { ans } else { -1 } } }
cpp 解法, 执行用时: 123 ms, 内存消耗: 135.2 MB, 提交时间: 2024-06-27 22:30:57
class Solution { public: int minOperations(vector<int>& nums) { int n = nums.size(); int ans = 0; for (int i = 0; i < n - 2; i++) { if (nums[i] == 0) { nums[i + 1] ^= 1; nums[i + 2] ^= 1; ans++; } } return nums[n - 2] && nums[n - 1] ? ans : -1; } };
java 解法, 执行用时: 6 ms, 内存消耗: 56.4 MB, 提交时间: 2024-06-27 22:30:42
public class Solution { public int minOperations(int[] nums) { int n = nums.length; int ans = 0; for (int i = 0; i < n - 2; i++) { if (nums[i] == 0) { nums[i + 1] ^= 1; nums[i + 2] ^= 1; ans++; } } return nums[n - 2] != 0 && nums[n - 1] != 0 ? ans : -1; } }
golang 解法, 执行用时: 120 ms, 内存消耗: 8.1 MB, 提交时间: 2024-06-27 22:30:30
func minOperations(nums []int) (ans int) { n := len(nums) for i, x := range nums[:n-2] { if x == 0 { nums[i+1] ^= 1 nums[i+2] ^= 1 ans++ } } if nums[n-2] == 0 || nums[n-1] == 0 { return -1 } return }
python3 解法, 执行用时: 153 ms, 内存消耗: 20.4 MB, 提交时间: 2024-06-27 22:30:15
class Solution: def minOperations(self, nums: List[int]) -> int: ans = 0 for i in range(len(nums) - 2): if nums[i] == 0: nums[i + 1] ^= 1 nums[i + 2] ^= 1 ans += 1 return ans if nums[-2] and nums[-1] else -1