当前位置: 首页 > news >正文

LeetCode:3191. 使二进制数组全部等于 1 的 最小次数(贪心 java)

目录

3191. 使二进制数组全部等于 1 的 最小次数

题目描述:

实现代码与解析:

贪心

原理思路:


3191. 使二进制数组全部等于 1 的 最小次数

题目描述:

        给你一个二进制数组 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

Related Topics

  • 位运算
  • 队列
  • 数组
  • 前缀和
  • 滑动窗口

实现代码与解析:

贪心

class Solution {public int minOperations(int[] nums) {int n = nums.length;int res = 0;for (int i = 0; i < n; i++) {if (nums[i] == 0) {if (i + 2 >= n) return -1;nums[i] ^= 1;nums[i + 1] ^= 1 ;nums[i + 2] ^= 1;res++;}}return res;}
}

原理思路:

        遍历,只要遇到0就反转其和其后的两个数。


http://www.mrgr.cn/news/53098.html

相关文章:

  • RabbitMQ队列
  • 在OLED屏上通过串口来显示视频的代码(python+C)
  • 云电脑使用教程标准版
  • 如果用Java设计MySQL中表级锁、行级锁和间歇锁会是怎么的?
  • opencv c++取mask的最大连通域
  • 图像识别技术的多领域应用:从医疗到安防
  • sql 32位长id 唯一
  • AI 工具大赏:探索智能时代的得力助手
  • Python将Excel文件转换为JSON格式
  • 闲谈【空仓及仓位管理】的重要性
  • 单步预测-风速预测模型代码全家桶
  • 哪家云电脑便宜又好用?ToDesk云电脑、顺网云、达龙云全方位评测
  • Windows安装Minio服务器端
  • Docker安装Minio+SpringBoot上传下载文件
  • Ubuntu 22.04上安装Miniconda
  • opengl课前要点梳理
  • DS链式二叉树的基本操作和OJ题(12)
  • 深入探讨ASP.NET Core中间件及其请求处理管道特性
  • 高校企业数据可视化平台功能介绍/特色功能
  • ruoyi框架配置多数据源