Day 30:100346. 使二进制数组全部等于1的最小操作次数Ⅱ

Leetcode 100346. 使二进制数组全部等于1的最小操作次数Ⅱ

给你一个二进制数组 nums 。

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

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

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

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

此题与 Leetcode 100344. 使二进制数组全部等于1的最小操作次数Ⅰ 类似,前者是从下标 i开始连续三个元素反转,此题是从下标i开始一直到数组末尾所有元素反转。

因此不能使用前者的算法:每次遇到 0 的时候,遍历后续所有元素,对其进行反转,这是非常浪费时间的。改进一下:

  • 当前元素为 1
    • 已经反转了偶数次,因此经过偶数次反转,值仍为 1,所以不用再反转。
    • 已经反转了奇数次,它的值已经变为 0,因此要反转,反转次数加一。
  • 当前元素为 0
    • 已经反转了偶数次,它还是 0,因此要反转,反转次数加一。
    • 已经反转了奇数次,它反转成了 1,因此不用再反转。

完整代码

java 复制代码
class Solution {
    public int minOperations(int[] nums) {
        int res = 0;
        int n = nums.length;
        for (int i = 0; i < n; i++) {
            if (nums[i] == 1) {
                if (res % 2 != 0) res++;
            } else {
                if (res % 2 != 1) res++;
            }
        }
        return res;
    }
}
相关推荐
萧瑟余晖2 分钟前
Spring Security综合实战与安全加固详解
java·安全·spring
云的雨 雨的云4 分钟前
手写算法动画上位机:从排序到线性代数可视化
线性代数·算法
imDwAaY17 分钟前
操作系统如何管理程序运行?从线程、进程到内存隔离与用户态切换:CS162 Note2
android·java·redis
const_qiu21 分钟前
第三章 08:3.10 本章小结
java·人工智能
Pniubi22 分钟前
快速排序(力扣基础)(递归)
java·数据结构·算法
roman_日积跬步-终至千里38 分钟前
【数据Agent论文·分析与报告评测|27】ComInsight:原子洞察正确,组合后的结论就可靠吗?
人工智能·算法·机器学习·数据分析
CarIise40 分钟前
Spring MVC 请求参数绑定与常用注解2
java·spring·mvc
七夜zippoe1 小时前
Spring Boot 接通义千问:从拿 Key 到第一个对话接口跑通(保姆级)
java·spring boot·后端
SimonKing1 小时前
别再花钱调 OCR 接口了!这个国产开源工具,免费还能离线跑
java·后端·程序员
Nebula_g1 小时前
SpringBoot企业级实战项目—云禾外卖—SpringBoot常用注解解析
java·网络·数据库·spring boot·后端·spring·javase