【数组】【最长距离】使循环数组所有元素相等的最少秒数

news2024/12/23 0:31:11

本文涉及知识点

数组 最长距离

LeetCode2808. 使循环数组所有元素相等的最少秒数

给你一个下标从 0 开始长度为 n 的数组 nums 。
每一秒,你可以对数组执行以下操作:
对于范围在 [0, n - 1] 内的每一个下标 i ,将 nums[i] 替换成 nums[i] ,nums[(i - 1 + n) % n] 或者 nums[(i + 1) % n] 三者之一。
注意,所有元素会被同时替换。
请你返回将数组 nums 中所有元素变成相等元素所需要的 最少 秒数。

示例 1:

输入:nums = [1,2,1,2]
输出:1
解释:我们可以在 1 秒内将数组变成相等元素:

  • 第 1 秒,将每个位置的元素分别变为 [nums[3],nums[1],nums[3],nums[3]] 。变化后,nums = [2,2,2,2] 。
    1 秒是将数组变成相等元素所需要的最少秒数。
    示例 2:

输入:nums = [2,1,3,3,2]
输出:2
解释:我们可以在 2 秒内将数组变成相等元素:

  • 第 1 秒,将每个位置的元素分别变为 [nums[0],nums[2],nums[2],nums[2],nums[3]] 。变化后,nums = [2,3,3,3,3] 。
  • 第 2 秒,将每个位置的元素分别变为 [nums[1],nums[1],nums[2],nums[3],nums[4]] 。变化后,nums = [3,3,3,3,3] 。
    2 秒是将数组变成相等元素所需要的最少秒数。
    示例 3:

输入:nums = [5,5,5,5]
输出:0
解释:不需要执行任何操作,因为一开始数组中的元素已经全部相等。

提示:
1 <= n == nums.length <= 105
1 <= nums[i] <= 109

枚举

本题    ⟺    \iff 一个病毒可以向左右各传播一位,最快多短时间传播到整个数组。
mIndexs 的key是值,value是此值所有的下标升序。
枚举各值传播到整个数组的时间。
v[i]到v[i+1]之间的数,显然最中间的数,最难传染。假定中间的数数量是x,需要传播的时间为:
{ x / 2 x 是偶数 ( x + 1 ) / 2 x 是奇数 \begin{cases} x/2 && x是偶数 \\ (x+1)/2 && x是奇数\\ \end{cases} {x/2(x+1)/2x是偶数x是奇数
可以统一为 (x+1)/2。
v[0]之前,v.back()之后的也要统一处理。其实v[1].size()等于0,也无需特殊处理。

代码

核心代码

 class Solution {
  public:
	  int minimumSeconds(vector<int>& nums) {
		  const int n = nums.size();
		  unordered_map<int, vector<int>> mIndexs;
		  for (int i = 0; i < n ; i++)
		  {
			  mIndexs[nums[i]].emplace_back(i);
		  }
		  int iRet = (nums.size()-1+1)/2;
		  for (const auto& [tmp, v] : mIndexs)
		  {
			  if (1 == v.size()) {
				  continue;
			  }
			  int iMaxCnt = n - 1 - v.back() + v.front();
			  for (int i = 1; i < v.size(); i++)
			  {
				  iMaxCnt = max(iMaxCnt, v[i] - v[i - 1] - 1);
			  }
			  iRet = min(iRet, (iMaxCnt + 1) / 2);
		  }
		  return iRet;
	  }
  };

测试用例

vector<int> nums = { 2, 1, 3, 3, 2 };
	{
		Solution sln;
		nums = { 2, 1, 3, 3, 2 };
		auto res = sln.minimumSeconds(nums);
		Assert(res, 2);
	}
	{
		Solution sln;
		nums = { 1,2,3 };
		auto res = sln.minimumSeconds(nums);
		Assert(res, 1);
	}

扩展阅读

视频课程

有效学习:明确的目标 及时的反馈 拉伸区(难度合适),可以先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771

如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

相关

下载

想高屋建瓴的学习算法,请下载《喜缺全书算法册》doc版
https://download.csdn.net/download/he_zhidan/88348653

我想对大家说的话
闻缺陷则喜是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

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

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

相关文章

第一个Swift程序

要创建第一个Swift项目&#xff0c;请按照以下步骤操作&#xff1a; 打开Xcode。如果您没有安装Xcode&#xff0c;可以在App Store中下载并安装它。在Xcode的欢迎界面上&#xff0c;选择“Create a new Xcode project”&#xff08;创建新Xcode项目&#xff09;。在模板选择界…

电脑总是蓝屏怎么办,电脑总是蓝屏怎么办开不了机

工作离不开电脑&#xff0c;不过电脑经常会出现一些故障让我们崩溃不已&#xff0c;尤其类似电脑蓝屏开不了机这种&#xff0c;总是突然发生&#xff0c;让人猝不及防。那么面对这一情况&#xff0c;相信很多人都是不知道该如何处理的。这里提供两个方法&#xff0c;第一种方法…

Centos 下载地址

下载镜像地址&#xff1a; 1、官网地址&#xff1a;The CentOS Project 2、阿里镜像站&#xff1a;centos安装包下载_开源镜像站-阿里云 3、清华镜像源&#xff1a;Index of /centos/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 3.、CentOS搜狐镜像&#xff1…

(源码+讲解+部署)基于Spring Boot和Vue的考研教育系统的设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2024年Java精品实战案例《128套》 &#x1f345;文末获取源码联系&#x1f345; &#x1f31f…

TCP协议简单总结

TCP&#xff1a;传输控制协议 特点&#xff1a;面向连接、可靠通信 TCP的最终目的&#xff1a;要保证在不可靠的信道上实现可靠的传输 TCP主要有三个步骤实现可靠传输&#xff1a;三次握手建立连接&#xff0c;传输数据进行确认&#xff0c;四次挥手断开连接 三次握手建立可靠…

C# 之 Task、async和 await 、Thread 的简单整理

1、异步方法(async/await) 在 C# 5.0 中出现的 async 和 await &#xff0c;让异步编程变得更简单。 此方法利用了 .NET Framework 4.5 及更高版本、.NET Core 和 Windows 运行时中的异步支持。 编译器可执行开发人员曾进行的高难度工作&#xff0c;且应用程序保留了一个类似…

[网鼎杯 2020 玄武组]SSRFMe

[网鼎杯 2020 玄武组]SSRFMe 源码 <?php function check_inner_ip($url) {$match_resultpreg_match(/^(http|https|gopher|dict)?:\/\/.*(\/)?.*$/,$url);if (!$match_result){die(url fomat error);}try{$url_parseparse_url($url);}catch(Exception $e){die(url foma…

Maven与Jave web结构

Maven 简介 https://www.liaoxuefeng.com/wiki/1252599548343744/1255945359327200 java web module web目录 –src 应用程序源代码和测试程序代码的根目录 –main –java  应用程序源代码目录     --package1     --class1     --class2 –resources  应用…

【用户案例】太美医疗基于Apache DolphinScheduler的应用实践

大家好&#xff0c;我叫杨佳豪&#xff0c;来自于太美医疗。今天我为大家分享的是Apache DolphinScheduler在太美医疗的应用实践。今天的分享主要分为四个部分&#xff1a; 使用历程及选择理由稳定性的改造功能定制与自动化部署运维巡检与优化 使用历程及选择理由 公司介绍 …

自动驾驶中的多目标跟踪_第四篇

自动驾驶中的多目标跟踪:第四篇 附赠自动驾驶学习资料和量产经验&#xff1a;链接 在上篇&#xff0c;我们得到了杂波背景下单目标状态的后验概率表达式。在不进行近似的情况下&#xff0c;是无法应用到实际场景中的。因此&#xff0c;在这一节&#xff0c;我们来讨论如何进行…

python课后习题三

题目&#xff1a; 解题过程&#xff1a; 模式A&#xff1a; num int(input("&#xff08;模式A&#xff09;输入数字&#xff1a;")) for i in range(num): for j in range(num): if j < i 1: …

泡泡写作好用吗 #微信#学习方法#媒体

泡泡写作是一款非常好用的论文写作工具&#xff0c;它集成了查重和降重的功能&#xff0c;大大提高了写作效率和质量。对于需要写论文的学生和研究人员来说&#xff0c;泡泡写作是一个靠谱的选择。 首先&#xff0c;泡泡写作提供了强大的查重功能&#xff0c;可以帮助用户快速检…

javaScript常见对象方法总结

1&#xff0c;object.assign() 用于合并对象的属性。它可以将一个或多个源对象的属性复制到目标对象中&#xff0c;实现属性的合并。 语法 Object.assign(target, ...sources); 1,target&#xff1a;目标对象&#xff0c;将属性复制到该对象中。 2,sources&#xff1a;一个…

【JVM】如何解决内存泄漏问题

什么是内存泄漏&#xff0c;如何解决内存泄漏问题&#xff1f; ⚫ 内存泄漏&#xff08;memory leak&#xff09;&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这 个对象就不会被垃圾回收器回收&#xff0c;这种情况就…

java Web在线考试管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP 在线考试管理系统是一套完善的web设计系统&#xff0c;对理解JSP java 编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,eclipse开发&#xff0c;数据库为Mysql5.0&#xff0c;使…

华为 2024 届校园招聘-硬件通⽤/单板开发——第一套(部分题目分享,完整版带答案,共十套)

华为 2024 届校园招聘-硬件通⽤/单板开发——第一套 部分题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;共十套&#xff09;获取&#xff08;WX:didadidadidida313&#xff0c;加我…

Go —— channel (二)

一个空的 channel 会产生哪些问题 读写nil管道均会阻塞触发死锁。关闭的管道仍然可以读取数据&#xff0c;向关闭的管道写数据会触发panic。 问&#xff1a;如果有多个协程同时读取一个channel&#xff0c;channel会如何选择消费者 channel 会按照维护的 recvq 等待读消息的…

结构体及联合体大小计算

结构体大小计算 结构体大小的计算的依据是结构体内存对齐 对齐规则&#xff1a; 1.结构体的第一个成员对齐到和结构体变量起始位置偏移量为0的地址处 2.其他成员变量要对齐到某个数字&#xff08;对齐数&#xff09;的整数倍的地址处。 &#xff08;对齐数编译器默认的一个对齐…

云数据库价格一瞥(华为云、百度智能云、腾讯云、阿里云)

最近&#xff0c;大家似乎和价格“磕”上了。本文仅考虑主流产品&#xff08; RDS MySQL、Redis &#xff09;的部分主流规格&#xff0c;对各家厂商的价格做一个对比&#xff0c;供参考。 TL;DR&#xff1a; 总体来看&#xff0c;各家云厂商价格趋于持平&#xff0c;部分主流商…

Android音视频的基础

视频是什么&#xff1f; 视频就是由一系列图片构成的。 视频帧 帧&#xff0c;是视频的一个基本概念&#xff0c;表示一张画面&#xff0c;如上面的翻页动画书中的一页&#xff0c;就是一帧。一个视频就是由许许多多帧组成的。 帧率 帧率&#xff0c;即单位时间内帧的数量&a…