1067. Sort with Swap(0,*) (25)
2015-11-25 18:55
344 查看
1.用一个数组pos记录各个元素所在的位置
2.假设0所在的位置为i,那么正确的排序应该是i在位置i上,所以0应该和i交换,即0的位置和i的位置交换,swap(pos[0],pos[i]),又pos[0]=i,即0的位置在i上,所以swap(pos[0],pos[pos[0]])
3.通过2中提到的,每次都把一个数换到正确的位置,步数最小
4.可能还存在尚未结束,但是0已经在位置0上,此时进行交换,对排序没有帮助,于是我们需要把0和任意一个不符合pos[i]=i要求的数进行交换,然后再进行上述的步骤。
5.需要记录上次是哪个i不满足pos[i]=i的要求,这样才能AC,不然会超时(即每次都得从0搜索到n-1,会超时)
AC代码:
2.假设0所在的位置为i,那么正确的排序应该是i在位置i上,所以0应该和i交换,即0的位置和i的位置交换,swap(pos[0],pos[i]),又pos[0]=i,即0的位置在i上,所以swap(pos[0],pos[pos[0]])
3.通过2中提到的,每次都把一个数换到正确的位置,步数最小
4.可能还存在尚未结束,但是0已经在位置0上,此时进行交换,对排序没有帮助,于是我们需要把0和任意一个不符合pos[i]=i要求的数进行交换,然后再进行上述的步骤。
5.需要记录上次是哪个i不满足pos[i]=i的要求,这样才能AC,不然会超时(即每次都得从0搜索到n-1,会超时)
AC代码:
//#include<string> //#include<stack> //#include<unordered_set> //#include <sstream> //#include "func.h" //#include <list> #include <iomanip> #include<unordered_map> #include<set> #include<queue> #include<map> #include<vector> #include <algorithm> #include<stdio.h> #include<iostream> #include<string> #include<memory.h> #include<limits.h> #include<stack> using namespace std; int main(void) { int n; cin >> n; vector<int> num(n); vector<int> pos(n); int disorderPos = -1;//记录不合要求的第一个位置 for (int i = 0; i < n; i++) { int tmp; scanf("%d", &tmp); pos[tmp] = i;//记录tmp所在位置i if (tmp != i&&disorderPos == -1) disorderPos = i; } int step = 0; while (1) { if (pos[0] != 0) {//把0所在的位置pos[0]=i换成数字i,此时数字i在位置pos[i]上,所以需要swap(pos[0], pos[pos[0]]); swap(pos[0], pos[pos[0]]); step++; } else { for (; disorderPos < pos.size(); disorderPos++) if (pos[disorderPos] != disorderPos)//找出不合要求的数 break; if (disorderPos == pos.size()) break; swap(pos[0], pos[disorderPos]); step++; } } cout << step << endl; return 0; }
相关文章推荐
- 1067. Sort with Swap(0,*) (25)
- NYOJ 739 笨蛋难题四
- 自定义UIButton
- Spring MVC+JSP实现三级联动
- iOS app调用相机和相册
- 带宽
- 包含继承关系的Java程序执行顺序(代码实例)
- 二叉树
- HDU 1156 Color the ball (线段树 区间更新)
- Exception:MappingException: Unknown entity 解决办法
- Js实现select联动,option从数据库中读取
- C# 上传下载ftp(支持断点续传)
- Android View学习相关和设置监听器的方法
- Java基础<十二>-----集合
- C# 上传下载ftp(支持断点续传)
- Android实战技巧:数据存储方式
- Gatling-基于Scala,Akka&Netty的性能测试框架
- 矩阵键盘总结
- 雷军的哽咽:致小米终将逝去的青春
- 实现部分库函数