LeetCode 使数组连续的最少操作数

地址:. - 力扣(LeetCode)
难度:困难
题目描述:给你一个整数数组 nums 。每一次操作中,你可以将 nums 中 任意 一个元素替换成 **任意 **整数。
如果 nums 满足以下条件,那么它是 连续的

  • nums 中所有元素都是 互不相同 的。
  • nums 中 最大 元素与 最小 元素的差等于 nums.length - 1 。

比方说,nums = [4, 2, 5, 3] 是 连续的 ,但是 nums = [1, 2, 3, 5, 6] 不是连续的
请你返回使 nums 连续最少 操作次数。

提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 109

题解过程

条件1:互不相同,

  • 所以得把相同的数替换掉,并且替换的数不能是数组中存在的数

条件2:最大的元素与最小的元素差 === nums.length(n) - 1

  • 如何确定最大值最小值?
  • 假设最小值为 left最大值 ,那么最大值 right = left+n−1。

问:假设最大最小值确定,那么相同需要替换的数字需要替换成什么?替换的数字可能因为存在数组中又导致重复吗?

答:这种情况是肯定不会存在的,因为 最大值-最小值 === n - 1
也就是说
最大值和最小值直接就差值了n-1
,假设数组紧密排列,两项之间只差值1,得到的数组会是[1,2,3……n],刚好满足最大值 - 最小值 === n-1

反向考虑,假设最后连续的数组的最小值为 left,则最大值 right=left+n−1。
原数组 nums 中,如果有位于 [left,right]中的,如果只出现一次,我们可以对其进行保留;
多次出现时,我们则需要对其进行操作;
不在这个区间的数字,我们也需要对其进行操作,将它们变成其他数字来对这个区间进行补足。
因此,我们需要统计原数组 nums中,位于区间 [left,right]内不同的数字个数 k,而 n−k就是我们需要进行的操作数。

接下来就是需要确定 left,我们可以将原数组 nums所有不同的数字作为 left的候选值,分别计算出 n−k,然后求出最小值。

这样的话,我们可以先将原数组进行去重后排序,然后利用滑动窗口。
滑动窗口左端点的值作为 left,然后向右扩展右端点,窗口的长度即为 k,求出所有可能性下最小的 n−k即可。

例子:[4,2,2,5,3]

例子:[1,10,100,1000]

/*** @param {number[]} nums* @return {number}*/
var minOperations = function(nums) {const n = nums.length;// 去重const sortedUniqueNums = [...new Set(nums)];// 排序sortedUniqueNums.sort((a, b) => a - b);let res = n;let j = 0;for (let i = 0; i < sortedUniqueNums.length; i++) {const left = sortedUniqueNums[i]; // 最小值const right = left + n - 1; // 最大值while (j < sortedUniqueNums.length && sortedUniqueNums[j] <= right) {// 因为排序过 所以后面的都是不符合要求的 //为什么去重不影响结果? 因为n是没去重的结果,减去的是符合要求的数,所以最终结果是对的// (i-1)是小于left的值  所以符合要求的结果是j-(i-1) = j-i+1res = Math.min(res, n - (j - i + 1));j++;}}return res;};

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

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

相关文章

Shopee虾皮100%有效提高广告效果的案例分享

Shopee 店铺运营中存在三种广告类型&#xff0c;分别是:关键词广告、关联广告和店铺广告。其中使用最为普遍&#xff0c;主控权最为直接的就是关键词广告&#xff0c;TA的适用范围最广&#xff0c;起效最快&#xff0c;并且可根据自身运营的能力去调控投入产出比&#xff0c;深…

SVM向量支持机

1.通俗理解 svm&#xff1a;support vector machine目标&#xff1a;利用超平面将两类数据分割开来&#xff0c;这个超平面就是我们要设计的对象 如何设计&#xff1f;我们设计之后会有间隔&#xff0c;间隔越大分类效果就越好&#xff1b;距离决策边界最近的点我们成为支持向…

个人求职简历(精选8篇)

HR浏览一份简历也就25秒左右&#xff0c;如果你连「好简历」都没有&#xff0c;怎么能找到好工作呢&#xff1f; 如果你不懂得如何在简历上展示自己&#xff0c;或者觉得怎么改简历都不出彩&#xff0c;那请你一定仔细读完。 互联网运营个人简历范文> 男 22 本科 AI简历…

【已完成】把Win10右键改回Win7的模样

win11右键设置成原来模样的方法如下&#xff1a; 1、winr打开运行窗口&#xff0c;输入regedit&#xff0c;按下回车键确认即可打开注册表。 2、在路径中输入&#xff1a;HKEY_CURRENT_USER\SOFTWARE\CLASSES\CLSID&#xff0c;或者是依次定位点开到CLSID。 3、右键点击CLSID&…

python--面向对象的三大特征---封装、继承、多态

1.封装&#xff1a; 1&#xff0c;在面向对象中&#xff0c;封装指的是一种安全机制&#xff0c;不让外界修改或者直接操作&#xff0c;将属性私有化&#xff1b; 如果要访问属性&#xff0c;提供公开的方法&#xff08;getter&#xff0c;setter&#xff09; 2. python的类如…

面试算法-166-排序链表

题目 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 解 class Solution {public ListNode sortList(ListNode head) {if (head null || head.next null…

【stm32】I2C通信协议

【stm32】I2C通信协议 概念及原理 如果我们想要读写寄存器来控制硬件电路&#xff0c;就至少需要定义两个字节数据 一个字节是我们要读写哪个寄存器&#xff0c;也就是指定寄存器的地址 另一个字节就是这个地址下存储寄存器的内容 写入内容就是控制电路&#xff0c;读出内容就…

R-Tree的简单介绍

一、R-Tree简介 R-Tree&#xff0c;全称是“Real Tree”&#xff0c;是一种专门为处理多维空间数据&#xff08;尤其是二维空间数据&#xff0c;如地理坐标&#xff09;设计的树形数据结构。 简单来说&#xff0c;它就像是一个特殊的目录&#xff0c;将空间数据按照它们的位置…

NIKKE胜利女神PC怎么设置中文 手把手教你设置中文教程

这个游戏中的妮姬分四个企业&#xff0c;其中朝圣者这个派别的妮姬很少而且不在愿望单理&#xff0c;朝圣者的所有姐姐都很哇塞&#xff0c;红莲更是其中的大姐大。一般想抽朝圣者只能靠歪或者出限定卡池&#xff0c;举个栗子&#xff0c;我入坑的时候 朝圣者 神罚 是限定卡池&…

计算系数(acwing,数论)

题目描述&#xff1a; 给定一个多项式 (axby)^k&#xff0c;请求出多项式展开后 x^n*y^m 项的系数。 输入格式&#xff1a; 共一行&#xff0c;包含 5 个整数&#xff0c;分别为 a&#xff0c;b&#xff0c;k&#xff0c;n&#xff0c;m&#xff0c;每两个整数之间用一个空格…

【STL】stack与queue的底层原理及其实现

文章目录 stack的介绍库中stack的使用栈的模拟实现queue的介绍库中queue的使用queue的模拟实现 stack的介绍 &#xff08;图片来自知乎&#xff09; 1.stack是一种容器适配器&#xff0c;模拟了栈的数据结构。数据只能从一端进去&#xff0c;另一端出来&#xff08;先进后出&am…

基于单片机水质检测仪系统仿真设计

**单片机设计介绍&#xff0c; 基于单片机水质检测仪系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机水质检测仪系统仿真设计的主要目标是&#xff0c;通过仿真手段验证基于单片机的水质检测仪系统的设计方…

硬盘容量骤降为0?原因解析与数据恢复秘籍

当我们打开计算机&#xff0c;准备进入日常的工作或娱乐时&#xff0c;突然发现硬盘容量显示为0&#xff0c;这无疑是一个令人头痛的问题。硬盘&#xff0c;作为我们存储重要数据和文件的关键设备&#xff0c;一旦容量显示为0&#xff0c;就意味着我们可能面临数据丢失的风险。…

Arduino开发 esp32cam+opencv人脸识别距离+语音提醒

效果 低于20厘米语音提醒字体变红 QQ录屏20240406131651 Arduino代码 可直接复制使用&#xff08;修改自己的WIFI) #include <esp32cam.h> #include <WebServer.h> #include <WiFi.h> // 设置要连接的WiFi名称和密码 const char* WIFI_SSID "gumou&q…

MYSQL 8.0版本修改用户密码(知道登录密码)和Sqlyog错误码2058一案

今天准备使用sqlyog连接一下我Linux上面的mysql数据库&#xff0c;然后就报如下错误 有一个简单的办法就是修改密码为password就完事!然后我就开始查找如何修改密码! 如果是需要解决Sqlyog错误码2058的话&#xff0c;执行以下命令&#xff0c;但是注意root对应host是不是loca…

Fecify站点斗篷cloak

斗篷cloak站点斗篷模式功能发布&#xff01;全新的应用场景&#xff0c;该模式是针对推广不用GMC&#xff0c;而是通过facebook&#xff0c;或者其他的一些平台/工具推广&#xff0c;这些推广方式的特点是&#xff1a;不需要商品的图片&#xff0c;或者说不会排查商品图片的侵权…

基础语法复习

常用的定义&#xff1a; 读取数据加速&#xff1a; input sys.stdin.readline 设置递归深度&#xff1a; sys.setrecursionlimit(100000) 记忆化搜索&#xff1a; from functools import lru_cache lru_cache(maxsizeNone) 计数器&#xff1a; Counter 类是一个非常有…

P8707 [蓝桥杯 2020 省 AB1] 走方格

原题链接&#xff1a;[蓝桥杯 2020 省 AB1] 走方格 - 洛谷 目录 1.题目描述 2.思路分析 3.代码实现 1.题目描述 2.思路分析 题目大意&#xff1a;现在有个人站在第 1 行第 1 列&#xff0c;要走到第 i 行第 j 列&#xff08;每次只能向右或者向下走&#xff09;&#xff0…

计算机的发展趋势

本文 我们来说计算机的发展趋势 目前来讲 计算机是朝着 巨型化 微型化 网络化 智能化发展 巨型化 指功能巨型化 是指其高速运算、大存储容量和强功能的巨型计算机。其运算能力一般在每秒百亿次以上、内存容量在几百兆字节以上。 主要用于航空航天、军事、气象、人工智能、生…

单链表学习

//静态链表&#xff0c;只往后看&#xff0c;找前面必须遍历 //算法题用数组解题更快速 //初始化,头节点为空 //将x插入到头节点 //将x插到结点k的后面 //将下标k的后面的点删掉 #include<algorithm> #include<iostream> #include<cstring> #include<queu…