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完整代码如下:
package main
import (
"fmt"
)
func minOperations(nums []int) int {
ops := 0
for _, num := range nums {
if (num == 0 && ops%2 == 0) || (num == 1 && ops%2 == 1) {
ops++
}
}
return ops
}
func main() {
nums := []int{0, 1, 1, 0, 1}
result := minOperations(nums)
fmt.Println(result)
}

Rust完整代码如下:
fn min_operations(nums: Vec<i32>) -> i32 {
let mut ops = 0;
for &num in &nums {
if (num == 0 && ops % 2 == 0) || (num == 1 && ops % 2 == 1) {
ops += 1;
}
}
ops
}
fn main() {
let nums = vec![0, 1, 1, 0, 1];
let result = min_operations(nums);
println!("{}", result);
}

python完整代码如下:
# -*-coding:utf-8-*-
def min_operations(nums):
ops = 0
for num in nums:
if (num == 0 and ops % 2 == 0) or (num == 1 and ops % 2 == 1):
ops += 1
return ops
if __name__ == "__main__":
nums = [0, 1, 1, 0, 1]
result = min_operations(nums)
print(result)

solidity完整代码如下:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MinOperations {
function minOperations(uint256[] memory nums) public pure returns (uint256) {
uint256 ops = 0;
for (uint256 i = 0; i < nums.length; i++) {
if ((nums[i] == 0 && ops % 2 == 0) || (nums[i] == 1 && ops % 2 == 1)) {
ops++;
}
}
return ops;
}
}

2025-01-22:使二进制数组全部等于 1 的最少操作次数Ⅱ。用go语言,给定一个二进制数组 nums,你可以对数组进行以下操作任意次(包括0次): 选择任何一个下标 i,并将从该下标开始到数组末的更多相关文章
- 51nod 1001 数组中和等于K的数对【二分查找/排序】
1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组 ...
- Linux CFS调度器之pick_next_task_fair选择下一个被调度的进程--Linux进程的管理与调度(二十八)
1. CFS如何选择最合适的进程 每个调度器类sched_class都必须提供一个pick_next_task函数用以在就绪队列中选择一个最优的进程来等待调度, 而我们的CFS调度器类中, 选择下一个 ...
- [LeetCode] Minimum Moves to Equal Array Elements 最少移动次数使数组元素相等
Given a non-empty integer array of size n, find the minimum number of moves required to make all arr ...
- [官方软件] Easy Sysprep v4.3.29.602 【系统封装部署利器】(2016.01.22)--skyfree大神
[官方软件] Easy Sysprep v4.3.29.602 [系统封装部署利器](2016.01.22) Skyfree 发表于 2016-1-22 13:55:55 https://www.it ...
- 1001 数组中和等于K的数对
1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A ...
- 1001 数组中和等于K的数对 1002 数塔取数问题 1003 阶乘后面0的数量 1004 n^n的末位数字 1009 数字1的数量
1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K ...
- 462. 最少移动次数使数组元素相等 II
给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最多为10000. 例如: 输入: [1,2,3] 输出: 2 说明: 只 ...
- 51Nod 1001 数组中和等于K的数对 And 1015 水仙花数
1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K ...
- Leetcode 462.最少移动次数使数组元素相等
最少移动次数使数组元素相等 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最多为10000. 例如: 输入: [1,2, ...
- 第二十四个知识点:描述一个二进制m组的滑动窗口指数算法
第二十四个知识点:描述一个二进制m组的滑动窗口指数算法 简单回顾一下我们知道的. 大量的密码学算法的大数是基于指数问题的安全性,例如RSA或者DH算法.因此,现代密码学需要大指数模幂算法的有效实现.我 ...
随机推荐
- callable结合FutureTask的多线程使用(免打扰模式)
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.ut ...
- LNMP一键安装
PHP环境快捷搭建工具: https://lnmp.org/ [安装] wget https://soft.lnmp.com/lnmp/lnmp2.1.tar.gz -O lnmp2.1.tar.gz ...
- JS逆向
插件工具v_jstools:https://github.com/cilame/v_jstools 对指定的一些操作进行监听 1) 一定要开启 是否挂钩总开关 2)是否启用一下几个加解密函数挂钩输出功 ...
- 《Java开发手册》-部分编码规范分享
0. 前言 本文来自<阿里巴巴Java开发手册>,以下内容均根据自己偏好摘抄.总结.分享. 1. 编程规约 包名单数,类名复数.例如:com.tao.util.JsonUtils.java ...
- Sealos Devbox 云开发框架使用教程
用过 Sealos 云开发的同学,想必都很熟悉函数式编程,喜欢 Sealos 云开发的那种完全不用关心路由,开发快,上线快,调试快,越用越简单越简单越用的感觉.它就像一个温柔的保姆,帮你打理好了所有的 ...
- Flutter之GetX之Obs
Flutter之GetX之Obs 除了之前说过的GetBuilder,GetX还有其他的状态管理方式 一个后缀就可以把一个变量变得可观察,变量每次改变的时候,使用它的小部件就会被更新 var name ...
- HttpClientFactory in ASP.NET Core 2.1 Part 5: 日志
HttpClientFactory in ASP.NET Core 2.1 Part 5: 日志 原文地址:https://www.stevejgordon.co.uk/httpclientfacto ...
- 中电金信新捷报:银行客户资源管理领域No.1
春暖花开,捷报频传 近日,中电金信 客户关系管理系统(CRM) 接连中标 让我们共同见证这波喜讯 01 中电金信凭借优秀的解决方案和丰富的服务案例经验,成功中标某全国性股份制银行同业CRM实施服务采购 ...
- 【Java】关于Maven仓库地址
仓库 如果你没有配置阿里云仓库镜像源,可以到这里来找 https://mvnrepository.com/ 如果你配置了阿里云仓库镜像源,可以来这里找 https://developer.aliyun ...
- sublime text 4 安装(含激活码)
一.下载步骤 官网地址:Sublime Text - the sophisticated text editor for code, markup and prose windows下载链接:Than ...