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;
    }
}
相关推荐
qq83686952012 分钟前
如何在Java中进行网络编程:Socket与NIO
java·开发语言·网络编程
心碎烤肠15 分钟前
数据结构历年考研真题对应知识点(数组和特殊矩阵)
数据结构·考研·矩阵
亚林瓜子26 分钟前
AWS中国云配置强制MFA策略后导致AWS CLI和IDEA中无法使用问题
java·intellij-idea·aws·role·mfa
情系明明1 小时前
回溯法c++学习 解决八皇后问题
java·c++·学习
捕风捉你1 小时前
深入理解适配器模式:Java实现与框架应用
java·开发语言·适配器模式
m0_588383321 小时前
入门JavaWeb之 MVC、Filter 过滤器和监听器
java·servlet·mvc
java6666688881 小时前
Spring MVC中使用ModelAndView传递数据
java·spring·mvc
ccLianLian1 小时前
图论·多源最短路径Floyd&dijsktra
算法·动态规划·图论
武子康1 小时前
Hadoop-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
xml·java·大数据·服务器·hadoop·后端·hdfs
盘门1 小时前
华为OD机考题HJ24 合唱队
java·开发语言