当前位置: 首页 > article >正文

【从零开始的LeetCode-算法】3192. 使二进制数组全部等于 1 的最少操作次数 II

给你一个二进制数组 nums 。

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

  • 选择数组中 任意 一个下标 i ,并将从下标 i 开始一直到数组末尾 所有 元素 反转 。

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

请你返回将 nums 中所有元素变为 1 的 最少 操作次数。

示例 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] 。

示例 2:

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

输出:1

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

  • 选择下标 i = 1 执行操作,得到 nums = [1,1,1,1] 。

提示:

  • 1 <= nums.length <= 105
  • 0 <= nums[i] <= 1
class Solution {
    public int minOperations(int[] nums) {
        int size = nums.length;
        int res = 0;
        for(int i = 0; i < size; i++){
            // 操作为偶数次,会反转回原数
            // 所以仅在奇数次时,反转当前元素即可
            if(res % 2 != 0){
                nums[i] ^= 1;
            }
            if(nums[i] == 0) res++;
        }
        return res;
    }
}

 


http://www.kler.cn/news/358065.html

相关文章:

  • 1. 解读DLT698.45-2017通信规约--预连接响应
  • linux tar 打包文件去掉文件所在路径
  • 图的最小生成树算法--普里姆(Prim)算法和克鲁斯克尔(Kruskal)算法
  • vue2项目 实现上边两个下拉框,下边一个输入框 输入框内显示的值为[“第一个下拉框选中值“ -- “第二个下拉框选中的值“]
  • ASP.NET Core8.0学习笔记(二十一)——EFCore关系配置API
  • 【基础篇】内存快照:宕机后,Redis如何实现快速恢复?
  • 大模型常见算子定义
  • 【ShuQiHere】使用域名代替 IP 地址进行 SSH 连接的完整指南*
  • Linux下基本指令(图文并茂、万字详解)
  • 62天框架安全(学习)
  • 如何将LiDAR坐标系下的3D点投影到相机2D图像上
  • 【c++】c++11多线程开发
  • 证件照小程序源码,前后端稳定运行
  • 手写模拟Spring的基本功能
  • 小白投资理财 - 解读利润指标
  • 【Spring】获取Cookie和Session(@CookieValue()和@SessionAttribute())
  • 剖析DNS劫持攻击原理及其防御措施
  • RAG流程的实现与改进
  • 微前端 Spa qiankun
  • Java项目-基于Springboot的高校党务系统项目(源码+说明).zip