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

力扣周赛置换环的应用,最少交换次数

置换环的基本概念

置换环是排列组合中的一个概念,用于描述数组元素的重排过程。当我们需要将一个数组转换为另一个数组时,可以把这个转换过程分解为若干个 “环”。每个环代表一组元素的循环交换路径。

举个简单例子

假设原数组 A = [3, 2, 1, 4],目标数组 B = [1, 2, 3, 4](即按升序排序)。
我们需要将 A 转换为 B,可以通过以下步骤分析:

确定每个元素的目标位置:

        1.原数组 A[0]=3,在目标数组 B 中应该位于索引 2(值为 3 的位置。

        2.原数组 A[2]=1,在目标数组 B 中应该位于索引 0(值为 1 的位置。

        3.这形成了一个环:索引 0 → 索引 2 → 索引 0,对应的值为 3 → 1 → 3

其他元素

原数组 A[1]=2 和 A[3]=4 已经在正确位置,各自形成长度为 1 的环

环的结构
环1:0 → 2 → 0 (长度2)
环2:1 → 1 (长度1)
环3:3 → 3 (长度1)

重要结论

将一个环排序所需的最小交换次数 = 环的长度 - 1。

最少总交换次数 = 总元素数 - 环的数量

来看一道字节跳动的力扣周赛

int getSum(int x){int ret=0;while(x){ret=ret+x%10;x/=10;}return ret;}
bool comp(const pair<int,int>&p1,const pair<int,int>& p2){int num1=getSum(p1.first);int num2=getSum(p2.first);if(num1==num2){return p1.first<p2.first;}else{return num1<num2;}
}
class Solution {
public:int minSwaps(vector<int>& nums) {int len=nums.size();vector<pair<int,int>> arr;for(int i=0;i<len;i++){arr.push_back({nums[i],i});}sort(arr.begin(),arr.end(),comp);vector<int> table(nums.size());for(int i=0;i<arr.size();i++){table[arr[i].second]=i;}vector<bool> visited(len,false);int circles=0;for(int i=0;i<len;i++){if(!visited[i]){int cur=i;circles++;while(!visited[cur]){visited[cur]=true;cur=table[cur];}}}return len-circles;//元素总数-环的数量}
};

相关文章:

  • Python爬虫实战:获取小说网最新风云榜数据并分析,为创作者提供参考素材
  • python-leetcode 71.每日温度
  • 【技术揭秘】Profinet转RS485如何优化冲剪机的实时通信性能?​​
  • App 出海:全渠道营销如何通过性能监控与精准归因实现增长
  • 【C++ Primer 学习札记】函数传参问题
  • Xilinx XCAU10P-2FFVB676I 赛灵思 Artix UltraScale+ FPGA
  • Xilinx 7Series\UltraScale FPGA MultiBoot Fallback
  • 力扣-三数之和
  • 浙大团队研发Earth Explorer系统,探索深时演化/地学剖面/科研场景,赋能深时地球科学研究
  • 可理解性输入:逛超市
  • 教师角色的转变:从知识传授者到学习引导者
  • LeetCode 1004. 最大连续1的个数 III
  • 友达15.6寸G156HAN02.3工业显示模组
  • Redis String 设计思想深度解析
  • Datacom-hcia~Datacom-hcie学习笔记索引
  • 力扣-有效三角形的个数
  • 初识Linux · NAT 内网穿透 内网打洞 代理
  • 从零基础到最佳实践:Vue.js 系列(6/10):《Composition API(组合式 API)》
  • Redis集群在NoSQL中的应用与优化策略
  • 如何用数据可视化提升你的决策力?
  • 做网站PAAS系统/百度关键词怎么设置
  • 微信电商小程序有哪些/重庆seo主管
  • 宣城做网站公司/上海牛巨微网络科技有限公司
  • 做网站为什么差价很大/邳州网站开发