POJ 1674
来源:互联网 发布:如何才能看网络电视 编辑:程序博客网 时间:2024/05/18 02:27
题意:给一个由1-n的整数组成的数列。对其进行交换两个数的操作。请问最少需要多少次操作,使得数列变成升序的1-n
思路:
举个例子来说,2 5 4 3 1。我们让 i 从1开始判断是否在i是否在该在的位置上。此时i=1不在位置1上,而且位置1上是2。2应该放在位置2上,而位置2上是5。位置5上是1。这就说明1,2,5三个数轮换一下,就能将这三个数换到各自应该在的位置。需要换2次。
顺着这个思路想,可以把1,2,5看成一个环,3,4看成另一个环。那么最后的答案就是 整个数列中不在各自该在位置的数的数量 - 环数。此例子中,就是5-2=3
所以,一个环中,如果有x个数,那么这个环需要x-1次操作。剩下的重点就是找出所有的环了。相信大家都会做了
大家可以想想为什么这个算法是正确的
总结:1Y, 250ms
注:sum记录整个数列需要的交换次数,nums记录一个环内的数的个数。found记录在这个数列中i是否被找到过,mk记录本次沿着环找数时i是否被找到过。
- POJ 1674
- poj 1674
- POJ 1674
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- 公务员考试计算机类专业
- 简单的asp分词算法(正向最大匹配)
- MySQL中文乱码,phpmyadmin乱码,php乱码 产生原因及其解决方法
- JavaFX相关网站
- CListCtrl
- POJ 1674
- smartupload.jar 实现文件上传下载
- C++虚函数表解析
- Unix常用命令
- 用AS3.0开发flash版SLG游戏-1
- struts 的国际化实现
- 关闭IIS的UNC远程文件缓存-文件更改通知
- 清华计算机类学习资料
- ASP.NET中cookie读写方法介绍