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

Leetcode.995 K 连续位的最小翻转次数

题目链接

Leetcode.995 K 连续位的最小翻转次数 rating : 1835

题目描述

给定一个二进制数组 n u m s nums nums 和一个整数 k k k

k k k位翻转 就是从 n u m s nums nums 中选择一个长度为 k k k子数组 ,同时把子数组中的每一个 0 0 0 都改成 1 1 1 ,把子数组中的每一个 1 1 1 都改成 0 0 0

返回数组中不存在 0 0 0 所需的最小 k k k位翻转 次数。如果不可能,则返回 − 1 -1 1

子数组 是数组的 连续 部分。

示例 1:

输入:nums = [0,1,0], K = 1
输出:2
解释:先翻转 A[0],然后翻转 A[2]。

示例 2:

输入:nums = [1,1,0], K = 2
输出:-1
解释:无论我们怎样翻转大小为 2 的子数组,我们都不能使数组变为 [1,1,1]。

示例 3:

输入:nums = [0,0,0,1,0,1,1,0], K = 3
输出:3
解释:
翻转 A[0],A[1],A[2]: A变成 [1,1,1,1,0,1,1,0]
翻转 A[4],A[5],A[6]: A变成 [1,1,1,1,1,0,0,0]
翻转 A[5],A[6],A[7]: A变成 [1,1,1,1,1,1,1,1]

提示:

  • 1 ≤ n u m s . l e n g t h ≤ 1 0 5 1 \leq nums.length \leq 10^5 1nums.length105
  • 1 ≤ k ≤ n u m s . l e n g t h 1 \leq k \leq nums.length 1knums.length

解法:贪心 + 差分

假设前 i − 1 i - 1 i1 个元素已经是全为 1 1 1 了,第 i i i 个元素是 0 0 0。我们要想翻转这个元素,就要翻转 [ i , i + k − 1 ] [i,i + k - 1] [i,i+k1] 整个区间的元素。并且这也是翻转第 i i i 位元素最少的操作次数,对于每一个元素都是如此。

需要注意的是:对于一个需要翻转的元素,它的反转次数必须是奇数,如果是偶数的话,就相当于没有翻转。

我们可以使用差分数组来优化翻转的过程,比如要翻转区间 [ i , i + k − 1 ] [i , i + k - 1] [i,i+k1],我们只需要让 [ i , i + k − 1 ] [i , i + k - 1] [i,i+k1] 中每一个元素的翻转次数 + 1 +1 +1,即 d i f f [ i ] + + , d i f f [ i + k ] − − diff[i]++ , diff[i + k]-- diff[i]++,diff[i+k] d i f f diff diff 就是差分数组。

时间复杂度: O ( n ) O(n) O(n)

C++代码:

class Solution {
public:int minKBitFlips(vector<int>& nums, int k) {int n = nums.size();vector<int> diff(n + 1);int cnt = 0 , ans = 0;for(int i = 0;i < n;i++){cnt += diff[i];//默认初始每一个元素都是 0//nums[i] + cnt 即元素 nums[i] 的翻转次数//如果翻转次数为偶数 , 说明当前元素还是0,需要翻转if((nums[i] + cnt) % 2 == 0){diff[i + 1]++;//此时 i + k > n 说明无法翻转了,直接返回 -1if(i + k > n) return -1;diff[i + k]--;ans++;}}return ans;}
};

相关文章:

Leetcode.995 K 连续位的最小翻转次数

题目链接 Leetcode.995 K 连续位的最小翻转次数 rating : 1835 题目描述 给定一个二进制数组 n u m s nums nums 和一个整数 k k k 。 k k k位翻转 就是从 n u m s nums nums 中选择一个长度为 k k k 的 子数组 &#xff0c;同时把子数组中的每一个 0 0 0 都改成 1 1 1 …...

PHP8的跳转语句-PHP8知识详解

如果循环条件满足的时候&#xff0c;则程序会一直执行下去。如果需要强制跳出循环&#xff0c;则需要使用跳转语句来完成。PHP8的跳转语句包括break语句、continue语句和goto语句。 1、break语句 break语句的作用是完全终止循环&#xff0c;包括while、do…while、for、switch…...

Idea中maven无法下载源码

今天在解决问题的时候想要下载源码&#xff0c;突然发现idea无法下载&#xff0c;这是真的蛋疼&#xff0c;没办法查看原因&#xff0c;最后发现问题的原因居然是因为Maven&#xff0c;由于我使用的idea的内置的Bundle3的Maven&#xff0c;之前没有研究过本地安装和内置的区别&…...

【linux-keepalive】keepalive避免单点故障,高可用配置

keepalive: [rootproxy ~]# yum install -y keepalived [rootproxy ~]# vim /etc/keepalived/keepalived.conf global_defs {router_id proxy1 //设置路由ID号vrrp_iptables //不添加任何防火墙规则 } vrrp_instance V…...

测试网络模型的FLOPs和params

概念 FLOPS&#xff1a;注意全大写&#xff0c;是floating point operations per second的缩写&#xff0c;意指每秒浮点运算次数&#xff0c;理解为计算速度。是一个衡量硬件性能的指标。 FLOPs&#xff1a;注意s小写&#xff0c;是floating point operations的缩写&#xf…...

《树莓派项目实战》第十五节 使用L298N驱动板模块驱动双极42步进电机

目录 15.1 双极步进电机引脚介绍 15.2 连接到树莓派 15.3 编写代码驱动步进电机 在本节,我们将学习如何使用L298N驱动板驱动一个双极42步进电机。该项目涉及到的材料有: 树莓派...

基于短信宝API零代码实现短信自动化业务

场景描述&#xff1a; 基于短信宝开放的API能力&#xff0c;实现在特定事件&#xff08;如天气预警&#xff09;或定时自动发送短信&#xff08;本文以定时群发短信为例&#xff09;。通过Aboter平台如何实现呢&#xff1f; 使用方法&#xff1a; 首先创建一个IPaaS流程&…...

Qt应用开发(基础篇)——信号槽 Signals and Slots

一、前言 Qt成为我们今天拥有的灵活而舒适的工具&#xff0c;除了友好和能够快速开发设计师界面&#xff0c;信号槽机制是最大的核心特征&#xff0c;也是区别于其他开发框架最大的优势。 Qt的信号槽作用于两个对象之间的通信。当一个对象发生了改变&#xff0c;它希望其他关心…...

正则表达式--Notepad++常用的替换

原文网址&#xff1a;正则表达式--Notepad常用的替换_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Notepad使用正则表达式进行替换时的常用的一些示例。 服务器JSON的格式化 例1&#xff1a;将回车去掉&#xff0c;改为正确的JSON格式 搜索&#xff1a; ([^,])(\r)(\n)(\s) 替…...

ES6 对象合并

对象合并 在 JavaScript 中&#xff0c;可以使用不同的方法来合并对象的属性。这样可以将两个或多个对象的属性合并到一个新的对象中。这是在编程中常见的一种操作&#xff0c;尤其在处理配置、选项或数据更新时非常有用。 以下是几种常见的对象合并方法&#xff1a; 1. 使用…...

使用线性回归预测票房收入 -- 机器学习项目基础篇(10)

当一部电影被制作时&#xff0c;导演当然希望最大化他/她的电影的收入。但是我们能通过它的类型或预算信息来预测一部电影的收入会是多少吗&#xff1f;这正是我们将在本文中学习的内容&#xff0c;我们将学习如何实现一种机器学习算法&#xff0c;该算法可以通过使用电影的类型…...

一文读懂|RDMA原理

什么是DMA DMA全称为Direct Memory Access&#xff0c;即直接内存访问。意思是外设对内存的读写过程可以不用CPU参与而直接进行。我们先来看一下没有DMA的时候&#xff1a; 无DMA控制器时I/O设备和内存间的数据路径 假设I/O设备为一个普通网卡&#xff0c;为了从内存拿到需要…...

深入理解负载均衡原理及算法

1. 前言 在互联网早期,网络还不是很发达,上网用户少,流量相对较小,系统架构以单体架构为主。但如今在互联网发达的今天,流量请求动辄百亿、甚至上千亿,单台服务器或者实例已完全不能满足需求,这就有了集群。不论是为了实现高可用还是高性能,都需要用到多台机器来扩展服…...

44.实现爱尔兰B公式计算并输出表格(matlab程序)

1.简述 1.话务量定义 话务量指在一特定时间内呼叫次数与每次呼叫平均占用时间的乘积。 话务量反映了电话负荷的大小&#xff0c;与呼叫强度和呼叫保持时间有关。呼叫强度是单位时间内发生的呼叫次数&#xff0c;呼叫保持时间也就是占用时间。 话务量计算方法 话务量公式为…...

【Linux】-- 进程间通信

目录 一、进程间通信介绍 二、管道 1.什么是管道&#xff08;pipe&#xff09; 2.重定向和管道 &#xff08;1&#xff09;为什么要有管道的存在 &#xff08;2&#xff09;重定向和管道的区别 3.匿名管道 &#xff08;1&#xff09;匿名管道原理 &#xff08;2&…...

[PyTorch][chapter 48][LSTM -3]

简介&#xff1a; 主要介绍一下 sin(x)&#xff1a; 为 数据 cos(x): 为对应的label 项目包括两个文件 main.py: 模型的训练&#xff0c;验证&#xff0c;参数保存 lstm.py 模型的构建 目录&#xff1a; lstm.py main.py 一 lstm.py # -*- coding: utf-8 -*- "&q…...

xss csrf 攻击

介绍 xss csrf 攻击 XSS&#xff1a; XSS 是指跨站脚本攻击。攻击者利用站点的漏洞&#xff0c;在表单提交时&#xff0c;在表单内容中加入一些恶意脚本&#xff0c;当其他正常用户浏览页面&#xff0c;而页面中刚好出现攻击者的恶意脚本时&#xff0c;脚本被执行&#xff0c;从…...

如何使用win10专业版系统自带远程桌面公司内网电脑,从而实现居家办公?

使用win10专业版自带远程桌面公司内网电脑 文章目录 使用win10专业版自带远程桌面公司内网电脑 在现代社会中&#xff0c;各类电子硬件已经遍布我们身边&#xff0c;除了应用在个人娱乐场景的消费类电子产品外&#xff0c;各项工作也离不开电脑的帮助&#xff0c;特别是涉及到数…...

leetcode做题笔记62

一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff1f; 思路一…...

图论 <最短路问题>模板

图论 <最短路问题> 有向图 1.邻接矩阵&#xff0c;稠密图 2.邻接表 &#xff08;常用&#xff09;单链表&#xff0c;每一个点都有一个单链表 &#xff0c;插入一般在头的地方插&#xff0c; 图的邻接表的存储方式 树的深度优先遍历 特殊的深度优先搜索&#xff0c…...

计算机网络性能指标

比特&#xff1a;数据量的单位 KB 2^10B 2^13 bit 比特率&#xff1a;连接在计算机网络上的主机在数字通道上传送比特的速率 kb/s 10^3b/s 带宽&#xff1a;信号所包含的各种频率不同的成分所占据的频率范围 Hz 表示在网络中的通信线路所能传送数据的能力&#xff08…...

vue + elementUI 实现下拉树形结构选择部门,支持多选,支持检索

vue elementUI 实现下拉树形结构选择部门&#xff0c;支持多选&#xff0c;支持检索 <template><div><el-select v-model"multiple?choosedValue:choosedValue[0]" element-loading-background"rgba(0,0,0,0.8)":disabled"disableFl…...

招投标系统简介 企业电子招投标采购系统源码之电子招投标系统 —降低企业采购成本 tbms

​功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为外…...

半监督学习(主要伪标签方法)

半监督学习 1. 引言 应用场景&#xff1a;存在少量的有标签样本和大量的无标签样本的场景。在此应用场景下&#xff0c;通常标注数据是匮乏的&#xff0c;成本高的&#xff0c;难以获取的&#xff0c;与之相对应的是却存在大量的无标注数据。半监督学习的假设&#xff1a;决策…...

datePicker一个或多个日期组件,如何快捷选择多个日期(时间段)

elementUI的组件文档中没有详细说明type"dates"如何快捷选择一个时间段的日期&#xff0c;我们可以通过picker-options参数来设置快捷选择&#xff1a; <div class"block"><span class"demonstration">多个日期</span><el…...

【语音合成】微软 edge-tts

目录 1. edge-tts 介绍 2. 代码示例 1. edge-tts 介绍 https://github.com/rany2/edge-tts 在Python代码中使用Microsoft Edge的在线文本到语音服务 2. 代码示例 import asyncio # pip install edge_tts import edge_tts TEXT """给我放首我喜欢听的歌曲…...

elevation mapping学习笔记3之使用D435i相机离线或在线订阅点云和tf关系生成高程图

文章目录 0 引言1 数据1.1 D435i相机配置1.2 协方差位姿1.3 tf 关系2 离线demo2.1 yaml配置文件2.2 launch启动文件2.3 数据录制2.4 离线加载点云生成高程图3 在线demo3.1 launch启动文件3.2 CMakeLists.txt3.3 在线加载点云生成高程图0 引言 elevation mapping学习笔记1已经成…...

ESP32 Max30102 (3)修复心率误差

1. 运行效果 2. 新建修复心率误差.py 代码如下: from machine import sleep, SoftI2C, Pin, Timer from utime import ticks_diff, ticks_us from max30102 import MAX30102, MAX30105_PULSE_AMP_MEDIUM from hrcalc import calc_hr_and_spo2BEATS = 0 # 存储心率 FINGER_F…...

16-4_Qt 5.9 C++开发指南_Qt 应用程序的发布

文章目录 1. 应用程序发布方式2. Windows 平台上的应用程序发布 1. 应用程序发布方式 用 Qt 开发一个应用程序后&#xff0c;将应用程序提供给用户在其他计算机上使用就是应用程序的发布。应用程序发布一般会提供一个安装程序&#xff0c;将应用程序的可执行文件及需要的运行库…...

oracle容灾备份怎么样Oracle容灾备份

随着科学技术的发展和业务的增长&#xff0c;数据安全问题越来越突出。为了保证数据的完整性、易用性和保密性&#xff0c;公司需要采取一系列措施来防止内容丢失的风险。  Oracle是一个关系数据库管理系统(RDBMS),OracleCorporation是由美国软件公司开发和维护的。该系统功能…...

做网站能自己找服务器吗/在线html5制作网站

当你在浏览器输入地址&#xff1a;http://localhost:8080/如果你的文件根目录里有 index.html&#xff0c;浏览器就会显示 index.html的内容&#xff0c;如果没有 index.html&#xff0c;Apache将在浏览器显示文件根目录的目录列表&#xff0c;目录列表包括文件根目录下的文件和…...

网站3d展示怎么做的/外贸公司如何做推广

蛋花花分享8个能提升Web前端开发技能的技巧&#xff0c;据蛋花花了解在互联网盛行的今天&#xff0c;越来越多的在线用户希望得到安全可靠并且快速的访问体验。针对Web网页过于膨胀以及第三脚本蚕食流量等问题&#xff0c;蛋花花提出以下改进建议&#xff0c;帮助他们为用户提供…...

大型网站建设公司沈阳/网站优化费用报价明细

本章内容 自定义属性快速入门 外化配置 自动配置 自定义创建 Starter 组件 摘录&#xff1a;读书是读完这些文字还要好好用心去想想&#xff0c;写书也一样&#xff0c;做任何事也一样 图 2 第二章目录结构图 第 2 章 Spring Boot 配置 Spring Boot 配置&#xff0c;包括自…...

做NBA网站目的/交换友链平台

Python的很多代码中&#xff0c;都能看到&#xff0c;在import模块的时候&#xff0c;模块前面有个点&#xff08;.&#xff09;&#xff0c;这是什么意思&#xff1f; 以下说明来自Python官方教材&#xff0c;https://docs.python.org/3/tutorial/modules.html。 假设有一个so…...

怎样做网站的反链/今天的热搜榜

有这样的需求&#xff1a; 从数据库查出key,value的结果列表&#xff0c;用jdbcTemplate的queryForList查出来的结果是List<Map<String,Obejct>>,然而需要的是一个key-value的map,可以如下转换&#xff1a; List<Map<String, Object>> resultList jd…...

做网站用什么配置的vps/珠海百度seo

搭建集群环境 首先创建三个EurekaServer 然后分别配置&#xff08;此处以7001端口的EurekaServer为例&#xff09;&#xff1a; 分别配置三个EurekaServer的端口号&#xff0c;7001、7002、7003然后绑定其他两个EurekaServer的地址 server:#配置服务端口port: 7001eureka:c…...