LeetCode 3191.使二进制数组全部等于 1 的最少操作次数 I:模拟(说是最小操作次数,其实不重复翻转就是了)

【LetMeFly】3191.使二进制数组全部等于 1 的最少操作次数 I:模拟(说是最小操作次数,其实不重复翻转就是了)

力扣题目链接:https://leetcode.cn/problems/minimum-operations-to-make-binary-array-elements-equal-to-one-i/

给你一个二进制数组 nums 。

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

  • 选择数组中 任意连续 3 个元素,并将它们 全部反转 。

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

请你返回将 nums 中所有元素变为 1 的 最少 操作次数。如果无法全部变成 1 ,返回 -1 。

 

示例 1:

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

输出:3

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

  • 选择下标为 0 ,1 和 2 的元素并反转,得到 nums = [1,0,0,1,0,0] 。
  • 选择下标为 1 ,2 和 3 的元素并反转,得到 nums = [1,1,1,0,0,0] 。
  • 选择下标为 3 ,4 和 5 的元素并反转,得到 nums = [1,1,1,1,1,1] 。

示例 2:

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

输出:-1

解释:
无法将所有元素都变为 1 。

 

提示:

  • 3 <= nums.length <= 105
  • 0 <= nums[i] <= 1

解题方法:模拟(其实是很不严格的证明)

从前到后遍历数组(遍历到倒数第三个元素),遇见 0 0 0则从当前位置开始连续翻转3个元素。

遍历结束后,若最后两个元素都是 1 1 1,则返回总翻转次数;否则则返回 − 1 -1 1

为何这样正常操作就是“最小操作次数”:

因为这样不会把“同样的三个元素”翻转多次(最小性证明),同时又不得不翻转(必要性证明)。

因为是从前向后遍历的,遇到零的话如果往前翻(前面全是1),则前面的1变成0后还需要额外次数再次翻转回1。

时空复杂度分析

  • 时间复杂度 O ( l e n ( n u m s ) ) O(len(nums)) O(len(nums))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
/*
011100
100100
100011
111111011100
100100
111000
1111110111
1001
1110
*/
class Solution {
public:int minOperations(vector<int>& nums) {int ans = 0;for (int i = 0; i < nums.size() - 2; i++) {if (!nums[i]) {ans++;// nums[i] ^= 1;  // 这个修改与否都无所谓了nums[i + 1] ^= 1;nums[i + 2] ^= 1;}}return nums[nums.size() - 1] & nums[nums.size() - 2] ? ans : -1;}
};
Go
package mainfunc minOperations(nums []int) int {ans := 0for i := 0; i < len(nums) - 2; i++ {if nums[i] == 0 {ans++nums[i + 1] ^= 1nums[i + 2] ^= 1}}if nums[len(nums) - 1] & nums[len(nums) - 2] == 1 {return ans} else {return -1}
}
Java
class Solution {public int minOperations(int[] nums) {int ans = 0;for (int i = 0; i < nums.length - 2; i++) {if (nums[i] == 0) {ans++;nums[i + 1] ^= 1;nums[i + 2] ^= 1;}}return (nums[nums.length - 1] & nums[nums.length - 2]) == 1 ? ans : -1;}
}
Python
from typing import Listclass Solution:def minOperations(self, nums: List[int]) -> int:ans = 0for i in range(len(nums) - 2):if not nums[i]:ans += 1nums[i + 1] ^= 1nums[i + 2] ^= 1return ans if nums[-1] & nums[-2] else -1

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/143064645

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu24.0离线安装Ollama和纯cpu版本以及对接Spring AI

文章目录 一.官网下载 0.3.13版本二.将文件包上传至ubuntu服务器三.下载安装脚本四.剔除GPU相关下载ROCM等&#xff0c;纯CPU运行脚本五.ollama常用命令六. 远程测试 七.对接spring AI 一.官网下载 0.3.13版本 ollama离线安装包下载地址 二.将文件包上传至ubuntu服务器 三.下…

【openwrt-21.02】openwrt中NPT(network prefix translation)实现举例

参考链接 [OpenWrt Wiki] NAT examples IPv4 NPT 启用 IPv4 到 IPv4 网络前缀转换 cat << "EOF" > /etc/nftables.d/npt.sh LAN_PFX="192.168.1.0/24" WAN_PFX="192.168.2.0/24" . /lib/functions/network.sh network_flush_cache …

电感电容谐振原理及Matlab仿真

一、电感电容谐振原理概述 电感电容谐振&#xff08;LC谐振&#xff09;是一种电路现象&#xff0c;它发生在电感器&#xff08;L&#xff09;和电容器&#xff08;C&#xff09;通过适当的方式连接时&#xff0c;电路中电流和电压之间形成共振。在这种共振状态下&#xff0c;…

计算机组成原理与系统结构——外部存储器

笔记内容及图片整理自XJTUSE “计算机组成原理与系统结构” 课程ppt&#xff0c;仅供学习交流使用&#xff0c;谢谢。 磁盘 磁盘是一个由非磁性材料构成的圆形盘片&#xff08;称为基片&#xff09;&#xff0c;上面涂抹可磁化材料。传统的基片一直是铝制或铝合金的&#xff0…

基于SpringBoot+Vue+Uniapp汽车保养系统小程序的设计与实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而…

linux下使用VSCODE 调试python

文章目录 一、环境准备安装VS Code&#xff1a;安装Python&#xff1a; 二、环境测试创建Python文件&#xff1a;编写测试代码运行 Linux下使用VS Code调试Python 在Linux环境中进行Python开发时&#xff0c;一个高效、直观的调试工具是必不可少的。Visual Studio Code&#xf…

2024.10月18日- Vue2组件开发(3)

Vue组件开发 一、 ref属性 如果在vue里&#xff0c;想要获取DOM对象&#xff0c;并且不想使用JS的原生语法&#xff0c;那么就可以使用ref属性。ref属性的用法&#xff1a; 1&#xff09;在HTML元素的开始标记中&#xff0c;或者在Vue子组件中的开始标记中定义&#xff0c;相…

第 5 章:vuex

1. 理解 vuex vuex 是什么&#xff1a; 概念&#xff1a;专门在 Vue 中实现集中式状态&#xff08;数据&#xff09;管理的一个 Vue 插件&#xff0c;对 vue 应用中多个组件的共享状态进行集中式的管理&#xff08;读/写&#xff09;&#xff0c;也是一种组件间通信的方式&am…

ant design vue TimePicker时间选择器不点击确认也可以设置值

文章目录 前言一、背景二、操作步骤1.复现前的准备工作&#xff08;1&#xff09;vue版本和ant design vue 版本&#xff08;2&#xff09;任意ant design vue TimePicker的demo 2.解决问题&#xff08;1&#xff09;使用change时间&#xff08;无效&#xff09;&#xff08;2&…

Python10.15作业

2、写程序&#xff0c;输入一个字符串&#xff0c; 打印字符串的如下内容 打印这个字符串的第一个字符打印这个字符串的最后一个字符串如果这个字符串的长度是 奇数&#xff0c;则打印中间这个字符 用 len(x) 求字符串的长度 #2 s1input(“请输入字符串”) print(s1[0]) pri…

uniapp上如何绑定全局事件总线(引入自定义全局组件例如弹窗)

1、在main.js中挂载bus // main.js Vue.prototype.$bus new Vue(); uni.$bus Vue.prototype.$bus; // 确保在 uni 上绑定 2、写一个全局弹窗组件 <template><view v-if"visible" class"toast-container"><view class"icon-conta…

DEV C++自动补全文件头的设置操作

第一步&#xff1a;打开DEV C 第二步&#xff1a;打开“工具” 第三步&#xff1a;点击“编辑器属性” 第四步&#xff1a;点击“代码” 第五步&#xff1a;点击“缺省源” 第六步&#xff1a;输入常用的文件头代码&#xff1a; 例如&#xff1a; #include<bits/stdc.h&g…

数据结构(JAVA)包装类泛型

文章目录 包装类基本数据类型和对应的包装类装箱和拆箱面试题 泛型什么是泛型泛型的语法泛型类的使用泛型的使用裸类型(Raw Type) &#xff08;仅需了解&#xff09;擦除机制泛型的上界泛型方法 包装类 基本数据类型和对应的包装类 注意&#xff0c;除了int基本数据类型的包装…

OracleT5-2 Solaris11安装

1、Solaris11安装 在光驱中插入Solaris11的光盘后,在ok提示中boot cdrom {0} ok boot cdrom NOTICE: Entering OpenBoot. NOTICE: Fetching Guest MD from HV. NOTICE: Starting additional cpus. NOTICE: Initializing LDC services. NOTICE: Probing PCI devices. N…

《 C++ 修炼全景指南:十六 》玩转 C++ 特殊类:C++ 六种必备特殊类设计的全面解析

摘要 这篇博客深入探讨了六种 C 特殊类的设计及其技术细节。首先&#xff0c;介绍了如何设计只能在堆上或栈上创建对象的类&#xff0c;通过控制构造函数的访问权限来限定对象的内存分配区域。接着&#xff0c;探讨了如何设计一个不能被拷贝的类&#xff0c;避免资源重复释放的…

玄机平台-应急响应-webshell查杀

首先xshell连接 然后进入/var/www/html目录中&#xff0c;将文件变成压缩包 cd /var/www/html tar -czvf web.tar.gz ./* 开启一个http.server服务&#xff0c;将文件下载到本地 python3 -m http.server 放在D盾中检测 基本可以确认木马文件就是这四个 /var/www/html/shell.p…

Qt通过QProcess调用第三方进程

我们在运行Qt程序时&#xff0c;有时需要调用第三方程序&#xff0c;这时就可以用QProcess类。具体如下&#xff1a; 一. 启用进程之前 我们需要在头文件中定义一个私有变量指针&#xff0c;为了使他能长时间运行&#xff0c;定义为指针。 #include <QProcess> class …

生活中的感悟

喜怒不形于色 以前一直觉得做人要做本我&#xff0c;该笑就笑该怒就怒。但慢慢发现&#xff0c;这样可能不太好。 暂且不谈别人会感知你的真实想法&#xff0c;就单说一点&#xff0c;表情是否会引起别人的误判&#xff1f;表情除了开心和愤怒&#xff0c;还有很多&#xff0…

【存储设备专栏 2.1 -- linux 下 fdisk -l 命令详细介绍】

> 请阅读【嵌入式及芯片开发学必备专栏】< 文章目录 fdisk -l 详细介绍fdisk -l 的详细介绍常用选项 使用举例查找新插入的 USB 设备 fdisk -l 详细介绍 在 Linux 系统中&#xff0c;fdisk 是一个用于磁盘分区的命令行工具。fdisk -l 则用于列出所有可用的磁盘及其分区信…

初识MySQL · 数据库

目录 前言&#xff1a; 数据库 简单使用 存储引擎 前言&#xff1a; 本文也是MySQL的第一篇文章了&#xff0c;新的知识点已经出现&#xff0c;怎么能够停止不前&#xff0c;穿越时空……(迪迦奥特曼乱入哈哈哈)。 言归正传&#xff0c;我们在本文的目标有&#xff1a; …