Given any permutation of the numbers {0, 1, 2,..., N−1}, it is easy to sort them in increasing order. But what if Swap(0, *)
is the ONLY operation that is allowed to use? For example, to sort {4, 0, 2, 1, 3} we may apply the swap operations in the following way:
Swap(0, 1) => {4, 1, 2, 0, 3}
Swap(0, 3) => {4, 1, 2, 3, 0}
Swap(0, 4) => {0, 1, 2, 3, 4}
Now you are asked to find the minimum number of swaps need to sort the given permutation of the first N nonnegative integers.
Each input file contains one test case, which gives a positive N (≤105) followed by a permutation sequence of {0, 1, ..., N−1}. All the numbers in a line are separated by a space.
For each case, simply print in a line the minimum number of swaps need to sort the given permutation.
10
3 5 7 2 6 4 9 0 8 1
9
题目给出一组已经打乱排序的数组,让你只能交换值为0和其他的数字,使得最终排序为升序,要求输出最少的交换次数。
1. 首先我们要明确,值为0的数,无论怎么交换,最终都会出现在数组下标为0的位置上。所以我们第一步就是从数组下标为0的位置开始交换,因为是两两交换,每次都会使得至少一个位置上的数字正确,所以肯定能把0放到下标为0的位置上:
while(number[0]!=0){
swap(number[0],number[number[0]]);
times++;
} // 使得number[0]位置上的数字可以出现在正确的位置上
2. 如果此时,依旧没有使得number[i]位置上的数字正确,那么就将0放到number[i]上,在第二次使0归为的途中,number[i]就一定会出现一个正确的数字了。
- #include
- using namespace std;
-
- int main(){
- int N;
- cin>>N;
- int number[N];
- int times = 0;
- for(int i=0;i
- cin>>number[i];
- }
-
- for(int i=1;i
- if(number[i] != i){
- while(number[0]!=0){
- swap(number[0],number[number[0]]);
- times++;
- }
- if(number[i]!=i){
- swap(number[0],number[i]);
- times++;
- }
- }
-
- }
- cout<
- }
-
相关阅读:
Qt在空窗口中创建自己的按钮
【深度学习】Pytorch torch.autograd 自动差分引擎
GIT合并任意两个指定分支
Android 获取某月所有的日期和星期
【预测模型-SVM预测】基于粒子群算法结合支持向量机SVM实现Covid-19风险预测附matlab代码
PD3.1详解 第三章(EPR)扩展消息详解
【Python 零基础入门】Numpy 常用函数 数组操作 & 数学运算
垃圾分类查询管理系统
GitHub上线重量级分布式架构原理设计笔记,开源的东西看着就是爽
2023自动驾驶 车道线检测数据集
-
原文地址:https://blog.csdn.net/weixin_55202895/article/details/126866128