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

​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数

 目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台


描述:

给你一个下标从 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

解题思路:

每次只能修改相邻的,所以决定一个数字多少次可以修改完,则需要找到同一个数字相间隔的最远距离即可。

所以我们首先统计一下每个值所对应的位置,减少遍历次数。

然后遍历每个值所对应的位置集合,找出想间隔最远的距离,这就这个值所需要的最少秒数。求出所有值的最小秒数即可。

 

代码:

public class Solution2808 {public int minimumSeconds(List<Integer> nums) {Map<Integer, List<Integer>> map = new HashMap<>();for (int i = 0; i < nums.size(); i++) {List<Integer> integers = map.computeIfAbsent(nums.get(i), k -> new ArrayList<>());integers.add(i);}int abs = 100000;for (Integer key : map.keySet()) {List<Integer> integers = map.get(key);int i = computeMaxDistance(integers, nums.size());abs = Math.min(abs, i);System.out.println("key:" + key + ",value:" + i);}return abs;}private int computeMaxDistance(List<Integer> integers, int length) {int distance = 0;int lastIndex = integers.get(integers.size() - 1) - length;int index = 0;while (index < integers.size()) {Integer integer = integers.get(index);distance = Math.max(distance, (integer - lastIndex) / 2);index++;lastIndex = integer;}return distance;}
}

相关文章:

  • vue使用json格式化
  • C,C++,C# 的区别
  • 20240129收获
  • CIFAR-10数据集详析:使用卷积神经网络训练图像分类模型
  • windows 11安装跳过联网,使用本地账户登陆
  • Spring AOP原理的常见面试题
  • SQL表操作DDL,DML和辅助的操作语句
  • uniapp移动端——企业微信H5调用jssdk实现扫一扫,通过weixin-java-cp获取ticket签名,配置config
  • 使用绿联私有云Docker搭建自动化实时网页监控工具,实现降价提醒/RSS监控等
  • 安卓11修改HDMI自适应分辨率
  • 基于Qt 音乐播放器mp3(进阶)
  • 大创项目推荐 题目:基于深度学习的中文对话问答机器人
  • 已实现:vue、h5项目如何使用echarts实现雷达图、六边形图表
  • 《HTML 简易速速上手小册》第2章:HTML 的标签和元素(2024 最新版)
  • Jmeter连接数据库报错Cannot load JDBC driver class‘com.mysql.jdbc.Driver’解决
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • CentOS6 编译安装 redis-3.2.3
  • iOS编译提示和导航提示
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • node.js
  • October CMS - 快速入门 9 Images And Galleries
  • Promise初体验
  • SpingCloudBus整合RabbitMQ
  • webpack+react项目初体验——记录我的webpack环境配置
  • 初识MongoDB分片
  • 创建一个Struts2项目maven 方式
  • 前端性能优化——回流与重绘
  • 世界上最简单的无等待算法(getAndIncrement)
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • # .NET Framework中使用命名管道进行进程间通信
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (rabbitmq的高级特性)消息可靠性
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (六)c52学习之旅-独立按键
  • (十)T检验-第一部分
  • (四)汇编语言——简单程序
  • (算法)Travel Information Center
  • (五)网络优化与超参数选择--九五小庞
  • (转)IOS中获取各种文件的目录路径的方法
  • .htaccess配置重写url引擎
  • .java 9 找不到符号_java找不到符号
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .Net Web窗口页属性
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET开源快速、强大、免费的电子表格组件