首页 > 试题广场 >

Sort with Swap(0,*) (25)

[编程题]Sort with Swap(0,*) (25)
  • 热度指数:2825 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
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.
示例1

输入

10 3 5 7 2 6 4 9 0 8 1

输出

9
头像 懒散之魂
发表于 2021-10-17 20:12:53
题目 OJ平台 题目解析 题意:给出一个数字N,然后给出 0~n-1 的乱序,需要我们给出最少通过多少次与 0 进行交换得出最后的排序情况? 这题乍一看毫无思绪,但其实之前有做这类限定和数组下标挂钩的序列,很快能想到用不断的下标交换法,但是这题是要求和 0这个数 进行交换而不是和 0 这个下标 展开全文