列表

详情


100344. 使二进制数组全部等于 1 的最少操作次数 I

给你一个二进制数组 nums 。

你可以对数组执行以下操作 任意 次(也可以 0 次):

反转 一个元素指的是将它的值从 0 变 1 ,或者从 1 变 0 。

请你返回将 nums 中所有元素变为 1 的 最少 操作次数。如果无法全部变成 1 ,返回 -1 。

 

示例 1:

输入:nums = [0,1,1,1,0,0]

输出:3

解释:
我们可以执行以下操作:

示例 2:

输入:nums = [0,1,1,1]

输出:-1

解释:
无法将所有元素都变为 1 。

 

提示:

相似题目

K 连续位的最小翻转次数

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int minOperations(vector<int>& nums) { } };

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

上一题