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

leetcode 3191. 使二进制数组全部等于 1 的最少操作次数 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 。

分析:给定的数组中的元素要么为 0,要么为 1,题目要求将数组中所有元素都变为 1,由于每次可以反转的元素为连续 3 个元素,此时只能从左到右或者从右到左依次遍历数组中的每个元素,遇到 0 时,则将后续的连续 3 个相邻的元素进行反转即可。任意连续的 3 个元素最多只会反转 1 次,且所有的反转操作都是必要的。

int minOperations(int* nums, int numsSize) {
    int t=0;
    for(int i=0;i<numsSize-2;++i)
    {
        if(nums[i]==0)
        {
            nums[i]=1;nums[i+1]^=1,nums[i+2]^=1;t++;
        }
    }
    if(nums[numsSize-1]==0||nums[numsSize-2]==0)return -1;
    return t;
}


http://www.kler.cn/news/361879.html

相关文章:

  • 力扣困难题汇总(16道)
  • 嵌套div导致子区域margin失效问题解决
  • linux环境下curl工具常用参数和用法
  • 十一、数据库配置
  • 如何在Linux中找到MySQL的安装目录
  • 文件处理新纪元:微信小程序的‘快递员’与‘整理师’
  • 计算机的错误计算(一百三十一)
  • EasyOCR——超强超便捷的OCR开源算法介绍与文本检测模型CRAFT微调方法
  • 『完整代码』坐骑召唤
  • 【数据结构】顺序表与链表的区别和各自特点
  • 数据结构-贪心算法笔记
  • MAC电脑的JDK、MAVEN配置及IDEA激活
  • Vehicle Spy3.9如何新建工程—Setup network Database
  • 基于SpringBoot中药材进存销管理系统【附源码】
  • C++基础(10. map_set 的使用)
  • 深入探索路由算法的核心原理与应用
  • ESlint代码规范
  • 基于PHP的减脂轻食购物网站【附源码】
  • 注册_登录安全分析报告:宝马中国
  • Vue学习笔记 Class绑定 Style绑定 侦听器 表单输入绑定 模板引用 组件组成 组件嵌套关系
  • concurrently 库作用
  • 如何让别人喜欢你的代码
  • VSCode生成HTML标准结构,使用VSCode进行提前设置为zh-CN
  • Disconnected from the target VM
  • C语言高效内存管理:对齐、缓存与位域
  • 智能升级:机器人焊钳修磨机VS传统修磨机,效率与质量的双重飞跃