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:

chatgpt

题目来自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,并将从该下标开始到数组末的更多相关文章

  1. 51nod 1001 数组中和等于K的数对【二分查找/排序】

    1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组 ...

  2. Linux CFS调度器之pick_next_task_fair选择下一个被调度的进程--Linux进程的管理与调度(二十八)

    1. CFS如何选择最合适的进程 每个调度器类sched_class都必须提供一个pick_next_task函数用以在就绪队列中选择一个最优的进程来等待调度, 而我们的CFS调度器类中, 选择下一个 ...

  3. [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 ...

  4. [官方软件] 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 ...

  5. 1001 数组中和等于K的数对

    1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A ...

  6. 1001 数组中和等于K的数对 1002 数塔取数问题 1003 阶乘后面0的数量 1004 n^n的末位数字 1009 数字1的数量

    1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K ...

  7. 462. 最少移动次数使数组元素相等 II

    给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最多为10000. 例如: 输入: [1,2,3] 输出: 2 说明: 只 ...

  8. 51Nod 1001 数组中和等于K的数对 And 1015 水仙花数

    1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K ...

  9. Leetcode 462.最少移动次数使数组元素相等

    最少移动次数使数组元素相等 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最多为10000. 例如: 输入: [1,2, ...

  10. 第二十四个知识点:描述一个二进制m组的滑动窗口指数算法

    第二十四个知识点:描述一个二进制m组的滑动窗口指数算法 简单回顾一下我们知道的. 大量的密码学算法的大数是基于指数问题的安全性,例如RSA或者DH算法.因此,现代密码学需要大指数模幂算法的有效实现.我 ...

随机推荐

  1. P7563 JOISC 2021 Day4 最悪の記者 4 (Worst Reporter 4)

    P7563 JOISC 2021 Day4 最悪の記者 4 (Worst Reporter 4) 线段树合并好题,通过线段树合并特别的方式优化了树形 dp. 思路 根据图中的不等关系连边建图,不难发现 ...

  2. 【一步步开发AI运动小程序】二十一、如果将AI运动项目配置持久化到后端?

    说明:本文所涉及的AI运动识别.计时.计数能力,都是基于云智「Ai运动识别引擎」实现.云智「Ai运动识别」插件识别引擎,可以为您的小程序或Uni APP赋于原生.本地.广覆盖.高性能的人体识别.姿态识 ...

  3. php 版本升级后需要对代码进行兼容性检测

    来到需要检测代码的目录下 需要提前安装 docker 执行 docker run --rm -v $(pwd):/app vfac/php7compatibility 7.3 . --ignore=v ...

  4. SpringFlex框架搭建

    或者参考http://limingnihao.iteye.com/blog/830409.使用Eclipse的Maven构建SpringMVC项目. 1.1 简单介绍 Spring是一个轻量级的控制反 ...

  5. 文件监控工具之fileboy

    github:dengsgo/fileboy: fileboy,文件变更监听通知工具,使用 Go 编写.Fileboy, File Change Monitoring Notification Too ...

  6. Gitee三方登录_Python (超详细)

    第三方登录是一种常见的身份验证机制,允许用户使用他们在其他平台(如社交媒体.电子邮件服务或开发平台)的账号来登录你的应用或网站,而不需要创建新的用户名和密码.这种方式不仅简化了用户的登录过程,还提高了 ...

  7. 10C++选择结构(4)——教学

    一.switch语句 (第25课 成绩等级) 问题:风之巅小学规定,若测试成绩大于或等于90分为"A",大于或等于70分小于90分为"B",大于或等于60分小于 ...

  8. COSBrowser文件编辑-随时随地在线编辑

    本文介绍如何通过COSBrowser文件在线编辑功能更方便的使用云上存储的数据. 痛点分析 日常工作和生活中,我们需要把记录的文档.编写的文案.音视频文件保存管理好,又担心设备损坏.文件丢失或是更换设 ...

  9. 使用 .NET Core 实现一个自定义日志记录器

    目录 引言 1. 抽象包 1.1 定义日志记录接口 1.2 定义日志记录抽象类 1.3 表结构迁移 2. EntityFramework Core 的实现 2.1 数据库上下文 2.2 实现日志写入 ...

  10. 【C#】【平时练习】将左边列表框(List)的内容(月份)添加到右边列表框。最终右侧显示的内容(月份)要保持一定顺序

    Aspx - 点击查看代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=" ...