【LeetCode】每日一题 2024_10_18 使二进制数组全部等于 1 的最少操作次数 I(贪心)

devtools/2024/10/23 20:48:12/

前言

每天和你一起刷 LeetCode 每日一题~

LeetCode 启动!

题目:leetcode.cn/problems/minimum-operations-to-make-binary-array-elements-equal-to-one-i/description/?envType=daily-question&envId=2024-10-18" rel="nofollow">使二进制数组全部等于 1 的最少操作次数 I

昨天的题目写不出来 . . . 如果我哪一天突然断更了,不用怀疑,就是那天的每日一题我写不了一点呜呜

代码与解题思路

今天的题目可以说是贪心,也可以说是脑筋急转弯,只要想到就很容易把代码写出来 . . . 不过老规矩,先读读题目

题目让我们:

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

返回能将数组变成 1 的最少次数,如果失败就返回 -1

核心思路:

因为我们要反转的是连续的三个元素,而数组所有元素要变成 1,只有一种解法,那就是从左往右遍历找所有的 0,然后全部进行反转,走过的位置不再重复遍历,保证元素都是 1

遇到 0 就反转,假设遍历到最后并不能让数组全为 1,那无论怎么反转都不能让数组变为 1 了。

思路略抽象,但是思考模拟一下就也比较容易理解。

func minOperations(nums []int) (ans int) {n := len(nums)for i, v := range nums[:n-2] {if v == 0 {nums[i] = 1nums[i+1] ^= 1nums[i+2] ^= 1ans++}}if nums[n-2] == 0 || nums[n-1] == 0 {return -1}return ans
}

补充:

反转 0 和 1 的小技巧,可以直接用异或 1 的操作:相同为 0,相异为 1。假设原数字是 1,那相同为 0 就反转成 0;假设原数字为 0,相异为 1 就反转成 1 了。

(PS:其实代码中 nums[i] = 1 是多余的,因为最后的判断只看倒数后两个元素是否为 0,前面遍历过的元素默认已经进行了反转操作)

每天进步一点点,我们明天不见不散~

可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。


http://www.ppmy.cn/devtools/128247.html

相关文章

Docker-registry私有镜像仓库的安装

Docker-registry私有镜像仓库的安装 我在这里的镜像仓库搭建在ip为192.168.3.23的虚机中。 安装docker-registry 1.拉取镜像 # docker pull registry 2.查看镜像 # docker images REPOSITORY TAG IMAGE ID CREATE…

string类(详解)

1.什么是string类 string是一个C自己库里面定义的一个类类型,它的内部结构如下。 class STring { public:STring(const char* str "")//默认构造函数{capacity strlen(str);_str new char[capacity 1];size capacity;strcpy(_str, str);}STring(cons…

Docker 安装Postgres和PostGIS,并制作镜像

1. 查找postgres和postgis现有的镜像和版本号 镜像搜索网站:https://docker.aityp.com/ 测试使用的是postgres:15.4 和 postgis:15-3.4 2、镜像拉取 docker pull postgres:15.4docker pull postgis/postgis:15-3.4镜像下载完成,docker images 查看如…

英雄联盟也裁员了。。。

大家好,我是鸭鸭! 想不到裁员的风刮到了《英雄联盟》。 2009 年,《英雄联盟》上线,直至今天它还活跃在网吧屏幕上。 有多少游戏可以经历 15年?对于《英雄联盟》来说,也许用“传奇”这个词更加合适。但如…

蓝桥杯基本操作和运算

文章目录 1.基本运算2.循环--进制转换/最大公约数2.1进制转换2.2求解最大公约数 3.数组与字符串4.常用的API5.快速读写模版 蓝桥杯基本操作和运算 10-22号正式开始准备蓝桥杯的比赛,准备参加这个大学B组的Java的赛项 1.基本运算 首先就是基本的输入输出&#xff1…

线性可分支持向量机的原理推导【补充知识部分】9-11极小极大化问题 公式解析

本文是将文章《线性可分支持向量机的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。在主文章中,有一个部分是关于补充拉格朗日对偶性的相关知识,此公式即为这部分里的内容。 公式 9-11 是通过引入拉格朗日乘子法将一个…

python多线程案例——多线程爬取小说

多线程案例——多线程爬取小说 生产者——————产生URL消费者兼生产者——下载小说消费者——————合并小说主函数——————函数入口 注意事项 这里我们使用了队列queue来储存URL,需要提取导入一下队列,我们在主函数中让队列实例化&#xff0…

【C++语言】深入学习C++要修炼的内功

一、进程虚拟地址空间区域划分 我们先来分析以下代码: int gdata1 10; int gdata2 0; int gdata3;static int gdata4 11; static int gdata5 0; static int gdata6;int main() {int a 12;int b 0;int c;static int e 14;static int f 0;static int g;retu…