使数组连续的最少操作数(Lc2009)——排序+去重+二分查找、排序+去重+双指针

给你一个整数数组 nums 。每一次操作中,你可以将 nums 中 任意 一个元素替换成 任意 整数。

如果 nums 满足以下条件,那么它是 连续的 :

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

比方说,nums = [4, 2, 5, 3] 是 连续的 ,但是 nums = [1, 2, 3, 5, 6] 不是连续的 。

请你返回使 nums 连续 的 最少 操作次数。

示例 1:

输入:nums = [4,2,5,3]
输出:0
解释:nums 已经是连续的了。

示例 2:

输入:nums = [1,2,3,5,6]
输出:1
解释:一个可能的解是将最后一个元素变为 4 。
结果数组为 [1,2,3,5,4] ,是连续数组。

示例 3:

输入:nums = [1,10,100,1000]
输出:3
解释:一个可能的解是:
- 将第二个元素变为 2 。
- 将第三个元素变为 3 。
- 将第四个元素变为 4 。
结果数组为 [1,2,3,4] ,是连续数组。

提示:

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

问题简要描述:返回使 nums 连续的最少操作次数 

解法一

细节阐述:

  1. 枚举以当前元素 nums[i] 作为连续数组的最小值,通过二分查找找到第一个大于 nums[i]+n−1 的位置 j,那么 j−i 就是当前连续数组的长度

Java

class Solution {public int minOperations(int[] nums) {int n = nums.length;Arrays.sort(nums);int m = 1;for (int i = 1; i < n; i++) {if (nums[i] != nums[i - 1]) {nums[m++] = nums[i];}}int ans = n;for (int i = 0; i < m; i++) {int j = search(nums, nums[i] + n - 1, i, m);ans = Math.min(ans, n - (j - i));}return ans;}int search(int[] nums, int x, int l, int r) {while (l < r) {int mid = (l + r) >> 1;if (nums[mid] > x) {r = mid;} else {l = mid + 1;}}return l;}
}

 Python3

class Solution:def minOperations(self, nums: List[int]) -> int:n = ans = len(nums)nums = sorted(set(nums))for i, x in enumerate(nums):j = bisect_right(nums, x + n - 1)ans = min(ans, n - (j - i))return ans        

解法二

细节阐述:

  1. 枚举以当前元素 nums[i] 作为连续数组的最小值,通过双指针找到第一个大于 nums[i]+n−1 的位置 j,那么 j−i 就是当前连续数组的长度

Java

class Solution {public int minOperations(int[] nums) {int n = nums.length;Arrays.sort(nums);int m = 1;for (int i = 1; i < n; i++) {if (nums[i] != nums[i - 1]) {nums[m++] = nums[i];}}int ans = n;for (int i = 0, j = 0; i < m; i++) {while (j < m && nums[j] - nums[i] <= n - 1) {j++;}ans = Math.min(ans, n - (j - i));}return ans;}
}

 Python3

class Solution:def minOperations(self, nums: List[int]) -> int:n = ans = len(nums)nums = sorted(set(nums))j = 0for i, x in enumerate(nums):while j < len(nums) and nums[j] - nums[i] <= n - 1:j += 1ans = min(ans, n - (j - i))return ans     

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

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

相关文章

力扣爆刷第116天之CodeTop100五连刷66-70

力扣爆刷第116天之CodeTop100五连刷66-70 文章目录 力扣爆刷第116天之CodeTop100五连刷66-70一、144. 二叉树的前序遍历二、543. 二叉树的直径三、98. 验证二叉搜索树四、470. 用 Rand7() 实现 Rand10()五、64. 最小路径和 一、144. 二叉树的前序遍历 题目链接&#xff1a;htt…

输入输出系统的组成以及i/o设备与主机的联系

输入输出系统的组成 1.i/o软件&#xff1a; i/o指令是机器指令的一类&#xff0c;包含操作码&#xff0c;命令码&#xff0c;设备码&#xff0c;操作码可作为i/o指令与其他指令的判别代码&#xff0c;命令码体现i/o设备的具体操作&#xff0c;设备码是多台i/o设备的选择码。 通…

Objective-C学习笔记(NString,匿名对象,self,继承,super,description)4.8

1.NSString:是一个类&#xff0c;存储OC字符串。 2.stringWithUTF8String&#xff1a;类方法&#xff0c;将C语言字符串转为OC字符串。 3.stringWithFormat&#xff1a;类方法&#xff0c;拼接字符串。 4.length&#xff1a;求字符串长度。 5.characterAtIndex(n)&#xff…

花样鼠标悬停特效

代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style&…

【WEEK7】学习目标及总结【MySQL】【中文版】

学习目标&#xff1a; 两周 三周完成MySQL的学习——第三周 学习内容&#xff1a; 参考视频教程【狂神说Java】MySQL最新教程通俗易懂事务及索引&#xff1a;索引权限管理MySQL备份规范数据库设计JDBC 数据库驱动statement对象 学习时间及产出&#xff1a; 第七周MON~FRI 2…

SAM功能改进VRP-SAM论文解读VRP-SAM: SAM with Visual Reference Prompt

现已总结SAM多方面相关的论文解读&#xff0c;具体请参考该专栏的置顶目录篇 一、总结 1. 简介 发表时间&#xff1a;2024年3月30日 论文&#xff1a; 2402.17726.pdf (arxiv.org)https://arxiv.org/pdf/2402.17726.pdf代码&#xff1a; syp2ysy/VRP-SAM (github.com)htt…

如何在极狐GitLab 使用Docker 仓库功能

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何在[极狐GitLab…

Docker - 镜像加速

博文目录 文章目录 镜像加速&#xff1f; No&#xff01; save:scp:load Yes&#xff01;Play with Docker (PWD)操作流程 镜像加速&#xff1f; No&#xff01; save:scp:load Yes&#xff01; 20240410: 现在国内不用梯子不配镜像加速可直接拉取官网镜像, 速度非常快, 所以此…

月亮和Pandas - Wes Mckinney的传奇故事

正如死亡和税收不可避免&#xff0c;Pandas对量化人而言&#xff0c;也具有同样的地位 – 每个人都不可避免地要与之打交道。而Wes Mckinney正是Pandas的创建者。Pandas是有史以来&#xff0c;最成功的Python库之一&#xff0c;以一已之力&#xff0c;开拓了Python的生存空间。…

Python结合spy++

导入必要的库 import win32con from win32 import win32gui from win32 import win32clipboard as w import pyautogui import sys1.获取窗口全部属性 def show_window_attr(hwnd):"""显示窗口的属性:param hwnd: 窗口句柄&#xff08;十进制&#xff09;:ret…

国内如何使用Suno-v3-AI音乐生成大模型?SparkAi创作系统搭建部署教程分享

一、文章前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持…

亚信安慧AntDB-T数据库重分布的实现原理

摘要&#xff1a; 亚信安慧AntDB-T是一款通用企业级、高可用、高性能的原生分布式关系型数据库&#xff0c;具有多种分片方式。在数据库的使用过程中&#xff0c;随着数据的变更和增长&#xff0c;需要重新修改表的分片方式。 AntDB-T数据库支持重分布命令&#xff0c;在内核…

使用docker制作Android镜像(实操可用)

一、安装包准备 1、准备jdk 下载地址&#xff1a;Java Downloads | Oracle 注意版本&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 我下载的jdk17&#xff0c;不然后面构建镜像报错&#xff0c;就是版本不对 2、准备安装的工具包 ttps://dev…

迭代器模式【行为模式C++】

1.简介 迭代器模式是一种行为设计模式&#xff0c; 让你能在不暴露集合&#xff08;聚合对象&#xff09;底层表现形式 &#xff08;列表、 栈和树等&#xff09; 的情况下遍历集合&#xff08;聚合对象&#xff09;中所有的元素。 迭代器的意义就是将这个行为抽离封装起来&a…

C语言中的数据结构--链表的应用1(2)

前言 上一节我们学习了链表的概念以及链表的实现&#xff0c;那么本节我们就来了解一下链表具体有什么用&#xff0c;可以解决哪些实质性的问题&#xff0c;我们借用习题来加强对链表的理解&#xff0c;那么废话不多说&#xff0c;我们正式进入今天的学习 单链表相关经典算法O…

题目:画图,综合例子。

题目&#xff1a;画图&#xff0c;综合例子。 There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated should…

【CSS】利用Vue实现数字翻滚动画效果

利用Vue实现数字翻滚动画效果 在很多数据可视化的需求中&#xff0c;动态呈现数据变化是一个常见且具有较强视觉冲击力的手段&#xff0c;尤其是数字的实时变化。今天我们将探讨如何使用 Vue.js 和 CSS3 来实现数字的翻滚动画效果&#xff0c;即模拟真实物体在Z轴上翻动的效果…

二分查找总结(十八天)

704. 二分查找 题目 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输…

elasticsearch不删除索引只清理数据——筑梦之路

这里主要使用了elasticsearch的接口 _delete_by_query # 清理指定时间之前的数据curl -X POST "http://localhost:9200/[索引名]/_delete_by_query?pretty&wait_for_completionfalse" -H Content-Type: application/json -d {"query": {"range…

WPS 365开启企业一站式AI办公;联发科推出生成式AI服务平台;马斯克:AI 明年或超越人类智力

WPS 365 升级一站式 AI 办公 昨日&#xff0c;金山办公生产力大会举行&#xff0c;现场发布了面向组织和企业的办公新质生产力平台 WPS 365&#xff0c;其包含升级的 WPS Office、最新发布的 WPS AI 企业版和 WPS 协作。 WPS 365 将能覆盖一个组织日常办公基本需求&#xff0c…