当前位置:首页 > 技术分析 > 正文内容

2025-01-22:使二进制数组全部等于 1 的最少操作次数Ⅱ。用go语言

ruisui884个月前 (02-18)技术分析17

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[1]

题目来自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 {
    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;
    }
}

在这里插入图片描述

引用链接

[1] chatgpt: https://chatbotsplace.com/?rc=nnNWSCJ7EP

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2040.html

标签: go数组
分享给朋友:

“2025-01-22:使二进制数组全部等于 1 的最少操作次数Ⅱ。用go语言” 的相关文章

Git 分支管理策略与工作流程

(预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料)团队开发中,遵循一个合理、清晰的Git使用流程,是非常重要的。否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护。看完这篇文章后,涉及GIT的工作中就会减少因为规范问题导致工作出错,当然如果你现在暂时还未有合...

一次Java内存占用高的排查案例,解释了我对内存问题的所有疑问

问题现象7月25号,我们一服务的内存占用较高,约13G,容器总内存16G,占用约85%,触发了内存报警(阈值85%),而我们是按容器内存60%(9.6G)的比例配置的JVM堆内存。看了下其它服务,同样的堆内存配置,它们内存占用约70%~79%,此服务比其它服务内存占用稍大。那为什么此服务内存占用稍大...

深度解析!AI智能体在To B领域应用,汽车售后服务落地全攻略

在汽车售后服务领域,AI智能体的应用正带来一场效率和专业度的革命。本文深度解析了一个AI智能体在To B领域的实际应用案例,介绍了AI智能体如何通过提升服务顾问和维修技师的专业度及维修效率,优化汽车售后服务流程。上周我分享了AI智能体+AI小程序To C的AI应用场景《1000%增长!我仅用一个小时...

史上最全 vue-router 讲解 !!!

前端路由 前端路由是后来发展到SPA(单页应用)时才出现的概念。 SPA 就是一个WEB项目只有一个 HTML 页面,一旦页面加载完成,SPA 不会因为用户的操作而进行页面的重新加载或跳转。 前端路由在SPA项目中是必不可少的,页面的跳转、刷新都与路由有关,通过不同的url显示相应的页面。 优点:前...

TDesign企业级开源设计系统越发成熟稳定,支持 Vue3 / 小程序

TDesing 发展越来越好了,出了好几套组件库,很成熟稳定了,新项目完全可以考虑使用。早在2021年,腾讯的 TDesing 刚发布不久,我就写了一篇简短的文章来介绍,当时主要关注的是 TDesign 的 Vue 组件库和用来搭建 admin 后台系统的实用性。虽然当时看起来不错,但还处于测试版,...

vue 如何实现跨域

跨域问题是因为浏览器的同源策略引起的,一种浏览器的安全机制,要求协议,域名,端口,都要一致!出于浏览器的同源策略限制,浏览器会拒绝跨域请求。什么叫跨域?非同源请求,均为跨域。名词解释:同源 —— 如果两个页面拥有相同的协议(protocol),端口(port)和主机(host),那么这两个页面就属于...