leetcode 1806. 还原排列的最少操作步数

news/2024/9/23 7:24:28/

题目链接:leetcode 1806

1.题目

给你一个偶数 n​​​​​​ ,已知存在一个长度为 n 的排列 perm ,其中 perm[i] == i​(下标 从 0 开始 计数)。
一步操作中,你将创建一个新数组 arr ,对于每个 i :
如果 i % 2 == 0 ,那么 arr[i] = perm[i / 2]
如果 i % 2 == 1 ,那么 arr[i] = perm[n / 2 + (i - 1) / 2]
然后将 arr​​ 赋值​​给 perm 。
要想使 perm 回到排列初始值,至少需要执行多少步操作?返回最小的 非零 操作步数。

2.示例

1)示例 1:
输入:n = 2
输出:1
解释:最初,perm = [0,1]
第 1 步操作后,perm = [0,1]
所以,仅需执行 1 步操作

2)示例 2:
输入:n = 4
输出:2
解释:最初,perm = [0,1,2,3]
第 1 步操作后,perm = [0,2,1,3]
第 2 步操作后,perm = [0,1,2,3]
所以,仅需执行 2 步操作

3)示例 3:
输入:n = 6
输出:4

4)提示:
2 <= n <= 1000
n​​​​​​ 是一个偶数

3.分析

我们以n=6为例,可以发现无论perm数组如何变化,arr数组每个下表对应perm数组的下标是不会变化的,那么对应关系如下:
0:0
1:3
2:1
3:4
4:2
5:5
我们以下标1为例子,从最初arr[1]=perm[3]逐步推,可以发现下标的顺序分别为:3,4,2,1,到最后arr[1]=perm[1]=1,所以问题转化为求最小环的长度

4.代码

class Solution {
public:map<int,int> map1;int ans=0;void get_dfs(int x){ans++;if(map1[x]==1) return;get_dfs(map1[x]);}int reinitializePermutation(int n) {for(int i=1;i<n;i++)if(i%2==0) map1[i]=i/2;else map1[i]=n/2+(i-1)/2;get_dfs(1);return ans;}
};
// 0:0
// 1:3
// 2:1
// 3:4
// 4:2
// 5:5
// 6:3

http://www.ppmy.cn/news/1356751.html

相关文章

[职场] 质量管理涉及哪些方面 #职场发展#笔记#经验分享

质量管理涉及哪些方面 质量管理是一种管理方法和理念&#xff0c;旨在确保产品、服务或流程符合预期的质量标准和要求。它涉及制定质量政策和目标、制定质量计划、执行质量控制措施、进行质量评估和持续改进等活动。 质量管理员是负责管理和维护质量管理体系的专业人员。他们负…

单例模式双端检测详解

正确写出doublecheck的单例模式_double check单例模式-CSDN博客

Python学习-流程图、分支与循环(branch and loop)

十、流程图 1、流程图&#xff08;Flowchart&#xff09; 流程图是一种用于表示算法或代码流程的框图组合&#xff0c;它以不同类型的框框代表不同种类的程序步骤&#xff0c;每两个步骤之间以箭头连接起来。 好处&#xff1a; 1&#xff09;代码的指导文档 2&#xff09;有助…

抵御数据攻击:有效应对.360勒索病毒的方法

导言&#xff1a; 在数字时代&#xff0c;恶意软件已经成为网络安全的一大挑战&#xff0c;而.360勒索病毒则是其中一种具有破坏性的恶意软件。本文91数据恢复将介绍.360勒索病毒的特点、恢复被其加密的数据文件的方法以及预防措施&#xff0c;以帮助读者更好地了解和对抗这种…

三、深入学习TensorRT,Developer Guide篇(二)

这篇文章基于官方文档的第二节 TensorRT’s Capabilities&#xff0c;不要认为这节没有用啊&#xff0c;其实知道一个工具的capability还是比较重要的&#xff0c;学习一个工具你得知道这个工具有啥用&#xff0c;能干啥&#xff0c;这样你在后面遇到某个问题的时候能评估出来那…

Linux下多核CPU指定程序运行的核

设置程序在指定CPU核心运行 一、如何查看程序运行的CPU信息 1.1 查看当前系统CPU有几个核心 查看CPU核心数量&#xff1a;lscpu 1.2 查看程序的PID ps aux|grep cpu_test1.3 查看程序可运行的CPU taskset -c -p pid1.4 设置程序在指定核心上运行 1.4.1 通过运行时的参数设…

基于java的眼镜店仓库管理系统

源码获取&#xff0c;加V&#xff1a;qq2056908377 摘要&#xff1a; 随着电子商务的兴起&#xff0c;越来越多的商家选择在线销售他们的产品。眼镜店作为零售业的一种&#xff0c;也不例外。随着市场需求的不断增加&#xff0c;眼镜店需要更加高效的管理他们的仓库和库存&…

Promise学习之路(一):Promise() 构造函数

文章目录 1 Promise() 语法2 Promise() 的参数3 Promise() 的返回值4 Promise() 的使用时机5 Promise 流程概述 Promise() 构造函数可创建 Promise 对象&#xff0c;主要用于封装尚未支持 Promise 的基于回调的 API。 1 Promise() 语法 Promise() 构造函数接收一个函数类型的…