PAT_1067. Sort with Swap(0,*)
来源:互联网 发布:短信数据恢复 编辑:程序博客网 时间:2024/06/15 21:25
#include <iostream>using namespace std;int a[100005],position[100005],N,inPositionNum=0,count=0,SwapTo=0;int FindFirst(int begin){for(int i=begin;i<N;i++)if(a[i]!=i)return i;return -1;}int main() { scanf("%d",&N); for(int i=0;i<N;i++) { scanf("%d",&a[i]); position[a[i]]=i; } while(FindFirst(SwapTo)!=-1) { if(a[0]==0) { SwapTo = FindFirst(SwapTo); if(SwapTo == -1) break; a[0] = a[SwapTo]; a[SwapTo] = 0; position[0] = SwapTo; position[a[0]] = 0; } else { a[position[0]] = position[0]; a[position[position[0]]]=0; int temp = position[0];position[0] = position[temp];position[temp] = temp;}count++;}printf("%d",count);return 0;}
输入:10 3 5 7 2 6 4 9 0 8 1
输出:9
一道模拟题,细节注意就能过,太久没做题,这题做了很久,也参考了网上的代码,但最终还是修改自己的第一份代码过的。
整体思路:手工操作一次就能明白模拟顺序是这样的,用数组a[]保存输入数据,即要被排序的序列,用数组position[]保存输入数据的下标,
如position[3]=0表示元素3在原始数组中的下标为0。
然后不断地去交换0和当时0所在位置应该填入的元素,直到0被换到下标为0的位置时,要进行一次废操作,即把0与一个位置摆放不对的元素进行交换。
整个循环结束的时机就是当原始数组中不存在a[i]!=i的情况。
一开始超时,后来看了别人的代码,对FindFirst函数进行了优化,就不超时了,不需要每一次都从0开始检测,这里还不是很明白,回头再看看。
阅读全文
0 0
- PAT_1067. Sort with Swap(0,*)
- 1067. Sort with Swap(0,*)
- 1067. Sort with Swap(0,*)
- 1067 Sort with Swap(0,*)
- 1067. Sort with Swap(0,*)
- 1067.Sort with Swap(0,*)
- pat1067 Sort with Swap(0,*)
- PAT1067 Sort with Swap(0,*)
- 1067. Sort with Swap(0,*)
- 1067. Sort with Swap(0,*)
- Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*)
- 1067. Sort with Swap(0,*)
- Sort with Swap(0,*)(25)
- Sort with Swap(0, i)
- Sort with Swap(0, i)
- 【PAT】1067. Sort with Swap(0,*)
- 1067. Sort with Swap(0,*) (25)
- numpy入门——基础运算
- Spring MVC 解读——<mvc:annotation-driven/>
- 剑指offer-17- 二叉树后序遍历
- ThinkPHP3.2的关联模型
- 如何使用IconFont?——矢量图标
- PAT_1067. Sort with Swap(0,*)
- C#语法,单例模式
- C# 获取当前路径方法
- ApplicationContext 、servletcontext和DispatcherServlet
- oracle中的 connect by prior用法
- String、StringBuffer、StringBuilder区别
- Struts中拦截器和过滤器的区别
- Zabbix v3.0安装部署转载
- TP5 标签库