leetcode.1806 还原排列的最少操作步数 - 模拟 + lcm

news2024/11/16 18:02:33

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

本题是数论题 共介绍4种解题方法

目录

1、所有置换环长度的最小公倍数

2、最小操作数是最大环长度

3、1或n-2所在环长度即为最大置换环长度

4、暴力模拟


思路:

因为数据范围很小 所以可以直接模拟

也可以优化一下——通过样例发现,最少操作数就是最大置换环的长度

更严谨地说,最少操作数 = 所有置换环长度的最小公倍数

 比如上图,n=10

置换环1 :【0】

置换环2 :【1,2,4,8,7,5】 

置换环3:【3,6】

置换环4:【9】

所以我们可以找出所以环长度的最小公倍数就是最少操作数

1、所有置换环长度的最小公倍数

gcd最大公约数

int gcd(int a,int b)
{
    return b!=0? gcd(b,a%b):a;
}

lcm最小公倍数

int lcm=a*b/gcd(a,b);
class Solution {
public:
    int reinitializePermutation(int n) 
    {
        int res=1,cnt;
        for(int i=1;i<n-1;i++) //0和n-1永远是自环 长度为1 不用枚举
        {
            int j=i;
            cnt=0;
            vector<int> st(n,0);
            while(!st[j])
            {
                st[j]=1;
                cnt++;
                j= j&1? n/2+(j-1)/2:j/2;
            }
            res=lcm(res,cnt);
        }
        return res;
    }
};

2、最小操作数是最大环长度

class Solution {
public:
    int reinitializePermutation(int n) 
    {
        vector<int> st(n,0);
        int res=1,cnt;
        for(int i=1;i<n-1;i++) //0和n-1永远是自环 长度为1 不用枚举
        {
            int j=i;
            cnt=0;
            while(!st[j])
            {
                st[j]=1;
                cnt++;
                j= j&1? n/2+(j-1)/2:j/2;
            }
            res=max(res,cnt);
        }
        return res;
    }
};

3、1或n-2所在环长度即为最大置换环长度

通过样例不难发现,下标为1或n-2永远处于最长置换环,所以算出其所在环长度即可

class Solution {
public:
    int reinitializePermutation(int n) 
    {
        int idx=1,res=0;
        do
        {
            idx= idx&1? n/2+(idx-1)/2:idx/2;
            res++;
        }while(idx!=1);
        return res;
    }
};
class Solution {
public:
    int reinitializePermutation(int n) 
    {
        int idx=n-2,res=0;
        do
        {
            idx= idx&1? n/2+(idx-1)/2:idx/2;
            res++;
        }while(idx!=n-2);
        return res;
    }
};

 

4、暴力模拟

class Solution {
public:
    int reinitializePermutation(int n) {
        vector<int> p,t;
        vector<int> a(n,0);
        for(int i=0;i<n;i++) p.push_back(i),t.push_back(i);

        int res=0;
        while(1)
        {
            if(a==t) break;
            for(int i=0;i<n;i++)
            {
                if(i%2==0) a[i]=p[i/2];
                else a[i]=p[n/2+(i-1)/2];
            }
            res++;
            p=a;
        }
        return res;
    }
};

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

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

相关文章

Python 模型训练:LSTM 时间序列销售额预测(训练、保存、调用)

LSTM (long short-term memory) 长短期记忆网络&#xff0c;具体理论的就不一一叙述&#xff0c;直接开始 流程一、数据导入二、数据归一化三、划分训练集、测试集四、划分标签和属性五、转换成 LSTM 输入格式六、设计 LSTM 模型6.1 直接建模6.2 找最好七、测试与图形化展示八、…

JavaSE-07

字节流输入输出数据&#xff1a; InputStream和OutputStream作为字节流输入输出流的超类。 字节流写数据时千万记得close关闭资源&#xff0c;可设置追加写为true 字节流读数据时&#xff0c;FileInputStream a new FileInputStream (“”); int by a.read(); char b (char…

隐蔽信道学习

隐蔽信道作为一种能够在不被系统感知的情况下稳定窃取秘密信息的通信手段&#xff0c;尽管其带宽通常较低&#xff0c;但其设计上的复杂性和多样性&#xff0c;使得常规的流量审计系统难以对抗或检测。同时&#xff0c;隐蔽信道也是密钥、身份认证、商业机密等秘密信息传输的重…

基于JAVA SSM框架的新闻管理系统源码+数据库,实现 登录 、 注册、 新闻内容、类别、评论、个人信息、系统管理等功能

[基于SSM框架的新闻管理系统] 前言 下载地址&#xff1a;基于JAVA SSM框架的新闻管理系统源码数据库 基于SSM框架的新闻管理系统&#xff1b; 实现 登录 、 注册 、 新闻内容、类别、评论、个人信息、系统管理等功能 &#xff1b; 可继续完善增加前端、等其他功能等&#x…

federated引擎实现mysql跨服务器表连接

&#x1f4e2;作者&#xff1a; 小小明-代码实体 &#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/as604049322 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 欢迎讨论&#xff01; &#x1f4e2;本文链接&#xff1a;https://xxmdmst.blog.csdn.n…

IU5066 高耐压带OVP保护1.2A单节锂电池线性充电IC

概要 IU5066E是面向空间受限便携应用的&#xff0c;高度集成锤离子和锤聚合物线性充电器器件。该器件由USB端口或交流适配器供电。带输入过压保护的高输入电压范围支持低成本、非稳压适配器。 电池充电经历以下三个阶段&#xff1a; 涓流、电流、恒压。在所有充电阶段&#x…

JSON对象(javascript)

本文内容主要包括了对于JS中JSON对象的一些内容。我们知道JSON格式是前后端进行信息交换的中介信息格式。适用于取代XML格式的一种格式&#xff0c;在多数编程语言中都有关于JSON的处理方法。那么javascript也提供了JSON对象用于处理相应的数据。 1. 什么是JSON格式&#xff1…

mac安装jdkidea配置jdk

第一步&#xff1a;mac安装jdk1、下载jdk&#xff0c;下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#java82、安装后&#xff0c;终端输入java -version查看java是否安装成功3、配置环境变量a.在终端输入 /usr/libexec/java_home 可以得到JAVA_HOM…

【矩阵论】5. 线性空间与线性变换——线性映射与自然基分解,线性变换

矩阵论 1. 准备知识——复数域上矩阵,Hermite变换) 1.准备知识——复数域上的内积域正交阵 1.准备知识——Hermite阵&#xff0c;二次型&#xff0c;矩阵合同&#xff0c;正定阵&#xff0c;幂0阵&#xff0c;幂等阵&#xff0c;矩阵的秩 2. 矩阵分解——SVD准备知识——奇异值…

深度学习人体解析

人体解析旨在将图像或视频中的人体分割成多个像素级的语义部分。在过去的十年中&#xff0c;它在计算机视觉社区中获得了极大的兴趣&#xff0c;并在广泛的实际应用中得到了应用&#xff0c;从安全监控到社交媒体&#xff0c;再到视觉特效&#xff0c;这只是其中的一小部分。尽…

Markdown语法大全(够你用一辈子)

标题 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 文本样式 > 引用文本 > 最外层 > > 第一层嵌套 > > > 第二层嵌套引用文本 最外层 第一层嵌套 第二层…

js中的call和apply

js中的call和apply1.call()可以调用某一函数2.call()可以这个函数的this指向3.call()也可以接受参数每次看到js中的call方法&#xff0c;都是懵逼的要去查查百度&#xff0c;自己研究记录下1.call()可以调用某一函数 testCall() {let person {fullName: function () {console.…

webpack基本使用

1、内置模块path &#xff08;1&#xff09;path模块用于对路径和文件进行处理&#xff0c;提供了很多好用的方法。 &#xff08;2&#xff09;我们知道在Mac OS、Linux和window上的路径时不一样的 window上会使用 \或者 \\ 来作为文件路径的分隔符&#xff0c;当然目前也支…

SpringBoot+VUE前后端分离项目学习笔记 - 【17 SpringBoot文件上传下载功能 MD5实现文件唯一标识】

Sql 数据库新建sys_file用来保存上传文件信息 CREATE TABLE sys_file (id int(11) NOT NULL AUTO_INCREMENT COMMENT id,name varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 文件名称,type varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 文…

STM32——I2C通信

文章目录I2C通信使用I2C通信的硬件设备硬件电路I2C时序基本单元起始与终止发送接收发送应答与接收应答I2C时序指定地址写当前地址读指定地址读连续读与写MPU6050简介MPU6050参数硬件电路MPU6050框图系统时钟MPU6050的中断源寄存器映像软件I2C读写MPU6050电路设计关键代码I2C通信…

C语言-扫雷

文章目录完整扫雷1. 说明2. 思路3. 各个功能实现3.1 雷盘初始化与打印1&#xff09;雷盘定义2&#xff09; 随机布置雷3.2 玩家排查雷1&#xff09; 获取坐标周围雷数2&#xff09; 递归展开3&#xff09;胜负判断3&#xff09; 显示雷位置4. 游戏试玩5. 游戏完整代码game.htes…

【定时任务】---- xxl-job、@Scheduled

一、Scheduled注解实现的定时任务 要实现计划任务&#xff0c;首先通过在配置类注解EnableScheduling来开启对计划任务的支持&#xff0c;然后在要执行计划任务的方法上注解Scheduled&#xff0c;声明这是一个计划任务。 在Spring Boot 的入口类 XXXApplication 中,必然会有S…

东南大学洪伟教授评述:毫米波与太赫兹技术

今日推荐文章作者为东南大学毫米波国家重点实验室主任、IEEE Fellow 著名毫米波专家洪伟教授&#xff0c;本文选自《毫米波与太赫兹技术》&#xff0c;发表于《中国科学: 信息科学》2016 年第46卷第8 期——《信息科学与技术若干前沿问题评述专刊》。 本文概要介绍了毫米波与太…

CSS知识点精学6-精灵图、背景图片大小、文字阴影、盒子阴影、过渡

目录 一.精灵图 1.精灵图的介绍 2.精灵图的使用步骤 二.背景图片大小 三.文字阴影 四.盒子阴影 五.过渡 一.精灵图 1.精灵图的介绍 场景&#xff1a;项目中将多张小图片&#xff0c;合成一张大图片&#xff0c;这张图片称之为精灵图 优点&#xff1a;减少服务器发送次…

clickhouse入门学习以及数据迁移

本文主要介绍如何入门clickhouse&#xff0c;以及将mariadb数据迁移过来&#xff0c;最后介绍当前几种的训练的示例数据库集。1、中文教程&#xff1a;中文教程&#xff1a;中文教程有了教程&#xff0c;需要有数据可以训练&#xff0c;教程提供示例数据集&#xff0c;但是数据…