力扣(leetcode)每日一题 3192 使二进制数组全部等于 1 的最少操作次数 II

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**] 。
题解
public static int minOperations(int[] nums) {  if (nums.length == 0) {  return 0;  }  int[] dp1 = new int[nums.length];  int[] dp0 = new int[nums.length];  if (nums[nums.length - 1] == 1) {  dp1[nums.length - 1] = 0;  dp0[nums.length - 1] = 1;  } else {  dp1[nums.length - 1] = 1;  dp0[nums.length - 1] = 0;  }  if (nums.length == 1) {  return nums[0] == 1 ? 0 : 1;  }  for (int i = nums.length - 2; i >= 0; i--) {  if (nums[i] == 1) {  dp1[i] = Math.min(dp1[i + 1], dp0[i + 1] + 1);  dp0[i] = Math.min(dp0[i + 1] + 2, dp1[i + 1] + 1);  } else {  dp0[i] = Math.min(dp0[i + 1], dp1[i + 1] + 1);  dp1[i] = Math.min(dp1[i + 1] + 2, dp0[i + 1] + 1);  }  }  return dp1[0];  
}

dp1的时候取右边全是0的情况和全是1的情况,目标是全部统一成1
dp0的时候取右边全是0的情况或者全是1的情况,目标是全部统一成0

大神的写法

 public int minOperations(int[] nums) {int ans = nums[0] ^ 1;for(int i = 1; i <  nums.length; i++)ans += nums[i - 1] ^ nums[i];return ans;
}
总结

这里选择的是最稳定的写法,从右到左的动态规划,保证能通过。

但是这个题目其实还是没有什么特别的,无非是从左边到右边,遇到了不一致的就进行反转。

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

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

相关文章

经验是最坏的老师

奥斯卡.王尔德说过&#xff1a;经验是最坏的老师。他经常先考试&#xff0c;然后再给出指导。 这让我想起了另外一句话&#xff1a;愚笨的人&#xff0c;往往都在犯同样的错误&#xff1b;普通的人&#xff0c;从自己的错误中学习&#xff1b;聪明人从别人的错误中学习。 如果…

Linux 防火墙的开启、关闭、禁用命令

Linux 防火墙的开启、关闭、禁用命令 文章目录 Linux 防火墙的开启、关闭、禁用命令1.设置开机启用防火墙2.设置开机禁用防火墙3.启动防火墙4.关闭防火墙5.检查防火墙状态 1.设置开机启用防火墙 systemctl enable firewalld.service2.设置开机禁用防火墙 systemctl disable f…

006、链表分割

0、题目描述 链表分割 这道题的思路&#xff0c;遍历原链表&#xff0c;小于x的放到一个链表里&#xff0c;大于x的放到另一个链表里。然后把两个链表接起来。 建立的两个新链表都是有哨兵位的&#xff0c;也就是有头结点&#xff0c;排序结束后要free两个头结点。 1、法1 还…

CSS3 提示框带边角popover

CSS3 提示框带边角popover。因为需要绝对定位子元素&#xff08;这里就是伪元素&#xff09;&#xff0c;所以需要将其设置为相对对位 <!DOCTYPE html> <html> <head> <title>test1.html</title> <meta name"keywords" con…

《C++开发 AR 游戏:开启未来娱乐新潮流》

一、引言 在当今科技飞速发展的时代&#xff0c;增强现实&#xff08;AR&#xff09;技术正以惊人的速度改变着我们的生活和娱乐方式。从智能手机上的 AR 滤镜到沉浸式的 AR 游戏&#xff0c;这项技术的应用越来越广泛。而在众多编程语言中&#xff0c;C以其高效、强大的性能在…

unity的一个bug

最近在写一个弹幕程序需要监听一个开源弹幕软件是否启动&#xff0c;没有启动就把他给启动。但实际上遇到了很多问题&#xff0c;unity这边竟然无法搜寻到 StringBuilder sb new StringBuilder();var all Process.GetProcesses();foreach (var item in all){//Console.WriteL…

格点拉格朗日插值与PME算法

技术背景 在前面的一篇博客中&#xff0c;我们介绍了拉格朗日插值法的基本由来和表示形式。这里我们要介绍一种拉格朗日插值法的应用场景&#xff1a;格点拉格朗日插值法。这种场景的优势在于&#xff0c;如果我们要对整个实数空间进行求和或者积分&#xff0c;计算量是随着变量…

JDK中socket源码解析

目录 1、Java.net包 1. Socket通信相关类 2. URL和URI处理类 3. 网络地址和主机名解析类 4. 代理和认证相关类 5. 网络缓存和Cookie管理类 6. 其他网络相关工具类 2、什么是socket&#xff1f; 3、JDK中socket核心Api 4、核心源码 1、核心方法 2、本地方法 3、lin…

【python_修改PPT中字体,run.font.name只对英文生效怎么办?】

python_修改PPT中字体&#xff0c;run.font.name只对英文生效怎么办&#xff1f; 参考&#xff1a;使用pptx_ea_font库设置中文字体 from pptx import Presentation from pptx.util import Pt from pptx_ea_font import set_font# 打开现有的 PPT 文件 prs Presentation(D:\…

JDK 1.6主要特性

JDK 1.6&#xff0c;也被称为Java 6或Java Platform, Standard Edition 6&#xff0c;是Java编程语言的第六个主要版本&#xff0c;由Sun Microsystems公司在2006年发布。JDK 1.6在JDK 1.5的基础上继续进行了改进和增强&#xff0c;进一步提高了Java的性能和易用性。 主要特性…

SQL Server 2019数据库“正常,已自动关闭”

现象&#xff1a; SQL Server 2019中&#xff0c;某个数据库在SQL Server Management Studio&#xff08;SSMS&#xff09;中的状态显示为“正常&#xff0c;已自动关闭”。 解释&#xff1a; 如此显示&#xff0c;是由于该数据库的AUTO_ CLOSE选项被设为True。 在微软的官…

基于 Konva 实现Web PPT 编辑器(三)

完善公式 上一节我们简单讲述了公式的使用&#xff0c;并没有给出完整的样例&#xff0c;下面还是完善下相关步骤&#xff0c;我们是默认支持公式的编辑功能的哈&#xff0c;因此&#xff0c;我们只需要提供必要的符号即可&#xff1a; 符号所表达的含义是 mathlive 的command命…

电力系统IEC-101报文主要常用详解

文章目录 1️⃣ IEC-1011.1 前言1.2 101规约简述1.3 固定帧格式1.4 可变帧格式1.5 ASDU1.5.1 常见类型标识1.5.2 常见结构限定词1.5.3 常见传送原因1.5.4 信息体地址 1.6 常用功能报文1.6.1 初始化链路报文1.6.2 总召报文1.6.3 复位进程1.8.4 对时1.8.4.1时钟读取1.8.4.2时钟写…

适用于 vue react Es6 jQuery 等等的组织架构图(组织结构图)

我这里找的是 OrgChart 插件; 地址: GitHub - dabeng/OrgChart: Its a simple and direct organization chart plugin. Anytime you want a tree-like chart, you can turn to OrgChart. 这里面能满足你对组织架构图的一切需求! ! ! 例: 按需加载 / 拖拽 / 编辑 / 自定义 / …

基于STM32F407VGT6芯片----跑马灯实验

一、在STM32F407VGT6芯片中配置GPIO环境 对于一个跑马灯实验&#xff0c;首先&#xff0c;要了解的就是&#xff0c;芯片是如何构造出来的&#xff0c;设计GPIO引脚&#xff1a;根据原理图&#xff0c; PC4&#xff0c;PC5,PC6,PC7 为 LED 输出控制管脚&#xff0c;PE0 为蜂鸣…

机器学习面试笔试知识点-线性回归、逻辑回归(Logistics Regression)和支持向量机(SVM)

机器学习面试笔试知识点-线性回归、逻辑回归Logistics Regression和支持向量机SVM 一、线性回归1.线性回归的假设函数2.线性回归的损失函数(Loss Function)两者区别3.简述岭回归与Lasso回归以及使用场景4.什么场景下用L1、L2正则化5.什么是ElasticNet回归6.ElasticNet回归的使…

navicat 3730错误

Navicat 3730 错误通常是由于在执行 SQL 语句时出现了语法错误或者其他问题导致的。具体来说&#xff0c;这个错误通常出现在 Navicat 尝试解析 SQL 语句时发现无法识别的语法或结构错误。 解决步骤 检查 SQL 语句的语法&#xff1a; 确保 SQL 语句语法正确无误。逐条执行 SQL…

嵌套div导致子区域margin失效问题解决

嵌套div导致子区域margin失效问题解决 现象原因解决方法 现象 <div class"prev"></div> <div class"parent"><div class"child"></div><div class"child"></div> </div> <div cl…

浅谈C++的future

std::future 是 C 标准库中的一个模板类&#xff0c;提供了一种机制来管理和获取异步任务的结果。它常与异步操作相关&#xff0c;允许你在不同线程中执行任务&#xff0c;并在将来&#xff08;即“未来”&#xff09;某个时刻获取这些任务的结果。std::future 通常和 std::asy…

如何处理mysql主从延迟

处理 MySQL 主从延迟的问题&#xff0c;可以考虑以下几个方面&#xff1a; 监控延迟&#xff1a; 使用 SHOW SLAVE STATUS 命令查看从库的状态&#xff0c;重点关注 Seconds_Behind_Master 字段&#xff0c;这个值表示从库落后主库的秒数。 优化 SQL 查询&#xff1a; 检查并优…