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

【LetMeFly】2808.使循环数组所有元素相等的最少秒数

力扣题目链接:https://leetcode.cn/problems/minimum-seconds-to-equalize-a-circular-array/

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

方法一:哈希表

其实不难发现,最终数组中元素的值一定是数组中某个原有元素的值。

因此使用一个哈希表,记录每个元素 a a a在nums数组中出现的位置。

这样,假设数组中所有元素最终都变成了 a a a,那么我们只需要枚举 a a a在原始数组中的所有出现位置,间隔最大的两个位置决定了“感染其他元素”所需要的时间。

枚举原始数组中所有出现过的元素(哈希表的键值),对于这个元素的所有出现位置,假设间距最大的是 t h i s M a x thisMax thisMax,则将数组权变成这个元素所需最小时间为 ⌊ t h i s M a x 2 ⌋ \lfloor\frac{thisMax}2\rfloor 2thisMax

所有的最小时间中最小的那个即为答案。

  • 时间复杂度 O ( l e n ( n u m s ) ) O(len(nums)) O(len(nums))
  • 空间复杂度 O ( l e n ( n u m s ) ) O(len(nums)) O(len(nums))

AC代码

C++
class Solution {
public:int minimumSeconds(vector<int>& nums) {unordered_map<int, vector<int>> ma;for (int i = 0; i < nums.size(); i++) {ma[nums[i]].push_back(i);}int ans = nums.size() - 1;for (auto&& [num, positions] : ma) {int thisMax = positions[0] + nums.size() - positions.back();for (int i = 1; i < positions.size(); i++) {thisMax = max(thisMax, positions[i] - positions[i - 1]);}ans = min(ans, thisMax / 2);}return ans;}
};
Python
# from typing import List
# from collections import defaultdictclass Solution:def minimumSeconds(self, nums: List[int]) -> int:ma = defaultdict(list)for i, val in enumerate(nums):ma[val].append(i)ans = len(nums) - 1for num, positions in ma.items():thisMax = positions[0] + len(nums) - positions[-1]for i in range(1, len(positions)):thisMax = max(thisMax, positions[i] - positions[i - 1])ans = min(ans, thisMax // 2)return ans

同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/135930013

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

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

相关文章

把 matlab 公式输出成 latex 公式形式

问题 latex 进行符号计算后&#xff0c;想直接把 matlab 中变量代表的公式结果输出成 latex 形式。 这样可以直接 复制到 latex 中&#xff0c;不需要手打公式了。 方法 matlab 函数 latex 可以实现上述功能&#xff0c;但最好是 使用 simpify(expand(~)) 进行化简 str_Jac…

关机恶搞小程序

1. system("shutdown")的介绍 当system函数的参数是"shutdown"时&#xff0c;它将会执行系统的关机命令。 具体来说&#xff0c;system("shutdown")的功能是向操作系统发送一个关机信号&#xff0c;请求关闭计算机。这将触发操作系统执行一系列…

MacOS安装反编译工具JD-GUI以及解决无法打开的问题

目录 一.下载地址 二.安装 三.问题 四.解决办法 1.显示包内容 2.找到Contents/MacOS/universalJavaApplicationStub.sh 3.修改sh文件 4.保存后再次打开即可 一.下载地址 Java Decompiler 二.安装 将下载下来的 jd-gui-osx-1.6.6.tar 解压&#xff0c;然后将 JD-GUI.a…

Hadoop3.x基础(1)

来源&#xff1a;B站尚硅谷 这里写目录标题 大数据概论大数据概念大数据特点(4V)大数据应用场景 Hadoop概述Hadoop是什么Hadoop发展历史&#xff08;了解&#xff09;Hadoop三大发行版本&#xff08;了解&#xff09;Hadoop优势&#xff08;4高&#xff09;Hadoop组成&#xf…

IntelliJ创建一个springboot工程

安装jdk mac教程 windows教程 安装maven mac教程 windows教程 建议&#xff1a; 在本地磁盘新建一个文件夹叫maven&#xff0c;然后把下载的maven安装到这里。在后续的IntelliJ操作中&#xff0c;配置maven的settings.xml和repository地址为这个目录下的地址。 创建sprin…

【架构】Docker实现集群主从缩容【案例4/4】

实现集群主从缩容【4/4】 接上一节&#xff0c;在当前机器为4主4从的架构上&#xff0c;减缩容量为3主3从架构。即实现删除6387和6388. 示意图如下&#xff1a; 第一步&#xff1a;查看集群情况&#xff08;第一次&#xff09; redis-cli --cluster check 127.0.0.1:6387roo…

四:C语言-条件分支语句

四&#xff1a;条件分支语句 C语言是结构化的程序设计语言&#xff0c;这里的结构指的是顺序结构、选择结构、循环结构。 我们可以使用if、switch实现分支结构&#xff1b;使用for、while、do while实现循环结构 1.if语句&#xff1a; 语法格式&#xff1a; if(表达式)代码块…

【Leetcode热题100】

哈希 1. 两数之和 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {//构建hash表 unordered_map<int,int>hash;//遍历每个元素数据for(int i 0 ; i < nums.size();i){//目标 - 当前数据 与当前设备匹配的元素数…

c# Get方式调用WebAPI,WebService等接口

/// <summary> /// 利用WebRequest/WebResponse进行WebService调用的类 /// </summary> public class WebServiceHelper {//<webServices>// <protocols>// <add name"HttpGet"/>// <add name"HttpPost"/>// …

【Linux】fork()函数

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

Docker 安装篇(CentOS)

Docker社区版 Docker从1.13版本之后采用时间线的方式作为版本号&#xff0c;分为社区版CE和企业版EE。 社区版是免费提供给个人开发者和小型团体使用的&#xff0c;企业版会提供额外的收费服务&#xff0c;比如经过官方测试认证过的基础设施、容器、插件等。 1、Docker 要求 C…

深度强化学习(王树森)笔记08

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…

校园圈子论坛系统--APP小程序H5,前后端源码交付,支持二开!uniAPP+PHP书写!

随着移动互联网的快速发展&#xff0c;校园社交成为了大学生们日常生活中重要的一部分。为了方便校园内学生的交流和互动&#xff0c;校园社交小程序逐渐走入人们的视野。本文将探讨校园社交小程序的开发以及其带来的益处。 校园社交小程序的开发涉及许多技术和设计方面。首先&…

安装elasticsearch、kibana、IK分词器

1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net 1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的镜像&#xff0c;这个镜像体积非常大&#xff0…

7、Json文件的操作总结【robot framework】

1、JSONLibrary简介 Robot Framework 是一种通用的自动化测试框架&#xff0c;它支持使用关键字驱动的测试&#xff0c;并且易于学习和使用。Robot Framework 提供了丰富的标准库&#xff0c;而 JSONLibrary 就是其中之一&#xff0c;用于处理 JSON 数据。 安装 JSONLibrary 在…

测试面试题常见题

文章目录 功能测试一个完整的测试计划应该包含哪些内容一个完整的测试用例包含哪些内容&#xff1f;什么时候需要发测试报告&#xff1f;一份测试报告应该包含哪些内容&#xff1f;一个完整的缺陷报告应该包含哪些内容&#xff1f;简述等价类划分法并举例针对具体场景的测试用例…

提升工作效率,畅享便捷PDF编辑体验——Adobe Acrobat Pro DC 2023

作为全球领先的PDF编辑软件&#xff0c;Adobe Acrobat Pro DC 2023将为您带来前所未有的PDF编辑体验。无论您是个人用户还是企业用户&#xff0c;Adobe Acrobat Pro DC 2023将成为您提高工作效率、简化工作流程的得力助手。 一、全面编辑功能 Adobe Acrobat Pro DC 2023提供了…

代码随想录 Leetcode110.平衡二叉树

题目&#xff1a; 代码(首刷看解析 2024年1月30日&#xff09;&#xff1a; class Solution { public:int depth(TreeNode* root) {if (root nullptr) return 0;int leftHeight depth(root->left);if (leftHeight -1) return -1;int rightHeight depth(root->right)…

打造高效经营:开发连锁餐饮管理系统的技术深度解析

为了适应市场的快速发展和提高经营效率&#xff0c;许多连锁餐饮企业纷纷投入开发连锁餐饮管理系统。 一、数字化转型的动力 传统的餐饮经营面临着诸多挑战&#xff0c;如订单管理、库存控制、人力资源等问题。在这样的背景下&#xff0c;连锁餐饮企业迫切需要一种全面而高效…

linux系统ansible性能调优和配置文件详解

性能调优 性能调优Ansible SSH 关闭秘钥检测OpenSSH 连接优化SSH pipelining 加速 AnsibleAnsible Facts 缓存优化 Ansible 配置文件详解 性能调优 Ansible 企业实战环境中&#xff0c;如果管理的服务器越来越多&#xff0c;Ansibe 执行效率会变得比较慢&#xff0c;可以通过优…