使数组连续的最少操作数

使数组连续的最少操作数

给你一个整数数组 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 <= 1 0 5 10^5 105
1 <= nums[i] <= 1 0 9 10^9 109

思路

一开始没想到去重,分享下思路吧。
先对数组排序,利用滑动窗口的思想,对每一个数cur,若以该数为目标数组的首位,则小于等于cur+len-1的数都是不需要修改的,
因此向后找到第一个大于cur+len-1的数 索引为j,该位置到末尾的距离len-j加上i之前的距离,就是当前情况下需要修改的元素个数。
当然这里向后找的过程,由于数组是递增的,可以二分。
这样提交了之后发现有重复元素挂了。[8,5,9,9,8,4] 很显然排序后为[4,5,8,8,9,9],用刚才的思路发现,以4开头,则所有的元素都
小于等于9,则修改次数为0。考虑到重复元素是肯定需要修改的,无论是否在该范围内,因此可以对数组进行预处理,先讲所有重复元素
处理为最小值,然后再向后找的过程中,为了防止多个连续最小值,多加个判断。

class Solution {public int minOperations(int[] nums) {int res = Integer.MAX_VALUE;int len = nums.length;// 去重Set<Integer> s = new HashSet<>();for(int i = 0; i < len; i++) {if(!s.add(nums[i]))nums[i] = Integer.MIN_VALUE;}Arrays.sort(nums);for(int i = 0; i < len; i++) {if(i >= res) break; // 剪枝int j = i + 1;  // i到j之外的数是当前需要修改的int cur = nums[i];while(j < len && nums[j] != Integer.MIN_VALUE && nums[j] <= cur + len - 1)j++;res = Math.min(res, len - j + i);}return res;}
}

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

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

相关文章

(表征学习论文阅读)A Simple Framework for Contrastive Learning of Visual Representations

Chen T, Kornblith S, Norouzi M, et al. A simple framework for contrastive learning of visual representations[C]//International conference on machine learning. PMLR, 2020: 1597-1607. 1. 前言 本文作者为了了解对比学习是如何学习到有效的表征&#xff0c;对本文所…

LeetCode题练习与总结:螺旋矩阵Ⅱ--59

一、题目描述 给你一个正整数 n &#xff0c;生成一个包含 1 到 n^2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]]示例 2&#xff1a; 输入&#xff1…

conda在【已有环境】上新建虚拟环境

在做Python工程时&#xff0c;经常遇到的一个问题就是&#xff1a;为了复现某个项目需要特地新建一个虚拟环境。但是&#xff0c;我们两个Project需要的环境几乎相同&#xff0c;只是有少数模块的版本互斥&#xff0c;这个时候都从0装一遍虚拟环境&#xff0c;就比较耽误时间。…

VMware启动显示“打开虚拟机时出错: 获取该虚拟机的所有权失败”

提示框&#xff08;忘截图了&#xff09;里提示目录C:\Users\mosep\Documents\Virtual Machines\VM-Win10 x64\中的某个文件&#xff08;在我这里好像是VM-Win10 x64.vmx&#xff0c;VM-Win10 x64是我给虚拟机取的名字&#xff09;在被使用中。 找到这个目录&#xff0c;删除.…

【面试题】如何在亿级别用户中检查用户名是否存在?

前言 不知道大家有没有留意过&#xff0c;在使用一些app或者网站注册的时候&#xff0c;提示你用户名已经被占用了&#xff0c;比如我们熟知的《英雄联盟》有些人不知道取啥名字&#xff0c;干脆就叫“不知道取啥名”。 但是有这样困惑的可不止他一个&#xff0c;于是就出现了“…

如何从应用商店Microsoft Store免费下载安装HEVC视频扩展插件

在电脑上打开一张HEIC类型的图片提示缺少HEVC解码器&#xff0c;无法打开查看&#xff0c;现象如下&#xff1a; 这种情况一般会提示我们需要下载安装HEVC解码器&#xff0c;点击“立即下载并安装”会跳转到应用商店&#xff0c;但是我们发现需要付费7元才能下载安装 免费安装…

6. Z 字形变换(Java)

目录 题目描述&#xff1a;输入&#xff1a;输出&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时&#xff0c;排列如…

mac | Windows 本地部署 Seata2.0.0,Nacos 作为配置中心、注册中心,MySQL 存储信息

1、本人环境介绍 系统 macOS sonama 14.1.1 MySQL 8.2.0 &#xff08;官方默认是5.7版本&#xff09; Seata 2.0.0 Nacos 2.2.3 2、下载&数据库初始化 默认你已经有 Nacos、MySQL&#xff0c;如果没有 Nacos 请参考我的文章 &#xff1a; Docker 部署 Nacos&#xff08;单机…

订阅edk2社区邮件列表

给社区发邮件步骤 UEFI订阅邮件列表 开发者订阅邮箱 develedk2.groups.io | Home 点击Join This Group&#xff0c;按照步骤填写自己邮箱地址&#xff08;该地址是edk2,发送邮件到该邮箱的地址&#xff09; 自己邮箱确认就可以自动收到邮件了 比如&#xff1a;

虚拟串口工具vspd.exe的使用

关于vspd虚拟串口工具的获取&#xff1a; 工具下载 &#xff08;1、 虚拟串口工具官方下载链接 2、通过本文资源下载&#xff09;工具按照步骤&#xff08;过于简单&#xff0c;此处省略&#xff09; 关于vspd虚拟串口工具的使用&#xff1a; 打开软件&#xff0c;如下&…

鸡哥的蛋糕大作战(蓝桥杯)

文章目录 鸡哥的蛋糕大作战问题描述模拟 鸡哥的蛋糕大作战 问题描述 鸡哥是一位著名的糕点师傅&#xff0c;他特别擅长做各种形状的蛋糕。他有一种特殊的蛋糕制作方法&#xff0c;那就是在蛋糕上开洞。有一天&#xff0c;他想到一个有趣的想法&#xff1a;不同的数字可以代表…

Ethernet 汇总

Ethernet系统 硬件最小系统 CPU:可以是复杂的芯片,也可以是小的单片机DMA:用于减轻CPU负担,搬运数据系统Memory<->FIFOMAC:可以集成在芯片里面,用于CPU和PHY之间的通信MII:接口用于MAC和PHY的通信,包括控制MDIO和数据DataPHY:模拟器件,最底层,数据收发源头软件…

【json.dump()】的用法和【pickle.dump()】的用法

json.dump()写入 json.dump() 函数用于将 Python 对象序列化为 JSON 格式的字符串,并将该字符串写入文件。它接受两个参数:要序列化的 Python 对象和要写入的文件对象。 下面是 json.dump() 函数的基本用法示例: import json# 要序列化的 Python 对象 data = {"name…

本地电脑渲染不行怎么解决?自助式渲染助你渲染无忧

有时候&#xff0c;即使购买了昂贵的新电脑&#xff0c;我们也可能会遇到渲染速度缓慢、画质不佳或渲染失败等问题。这些问题可能由多种因素引起。针对该问题&#xff0c;为大家推荐了自助式的渲染&#xff0c;解决你本地电脑渲染不佳问题。 电脑渲染不行原因 新电脑渲染效果不…

【Vue】Vue3开发从入门到实战目录【最新版本vue3+typescript前端开发教程】

Vue3开发从入门到实战目录 1. vue3简介与环境配置 2. 创建vue3项目 3. 我的第一个组件 4. 编写简单页面效果 5. OptionsAPI与CompositionAPI 6. setup概述与使用 7. ref基本类型的响应式数据 8. ref对象类型的响应式数据 9. reactive对象类型的响应式数据 10…

Node.js从基础到高级运用】二十二、同步执行的子进程

引言 在 Node.js 的应用程序中&#xff0c;我们有时候需要在父进程中同步地执行子进程&#xff0c;这对于需要顺序执行任务或者处理命令行工具的输出特别有用。child_process 模块在 Node.js 中用于创建子进程&#xff0c;并且提供了几种同步执行子进程的方法。在 Windows 系统…

MongoDB主从复制模式基于银河麒麟V10系统

MongoDB主从复制模式基于银河麒麟V10系统 背景介绍 MongoDB自4.0版本开始已经不再建议使用传统的master/slave复制架构,而是全面采用了复制集(Replica Sets)作为标准的复制和高可用性解决方案。 复制集是MongoDB的一种数据复制和高可用性机制,通过异步同步数据至多个服务…

为什么企业推广需要品牌故事?媒介盒子分享

从时代来看&#xff0c;我们正处“信息超载的商业时代”&#xff0c;品牌传播面临着“产品同质化”和“信息超载化”的困境。近日小米SU7的出圈除了汽车本身的话题度外&#xff0c;离不开小米的品牌故事、创始人雷军的话题等等。今天媒介盒子就来和大家聊聊&#xff1a;为什么企…

postgresql发布和订阅

一、发布订阅介绍 发布和订阅使用了pg的逻辑复制的功能&#xff0c;通过发布端创建publication与表绑定&#xff0c;订阅端创建subscription同时会在发布端创建逻辑复制槽实现逻辑复制功能 逻辑复制基于 发布&#xff08;Publication&#xff09; 与 订阅&#xff08;Subscri…

【go】模板展示不同k8s命名空间的deployment

gin模板展示k8s命名空间的资源 这里学习如何在前端单页面&#xff0c;调用后端接口展示k8s的资源 技术栈 后端 -> go -> gin -> gin模板前端 -> gin模板 -> html jsk8s -> k8s-go-client &#xff0c;基本资源(deployment等) 环境 go 1.19k8s 1.23go m…