題面
核心思想
這道題跟樹沒有任何關係。。。
樣例的 2 1 4 3 直接在陣列交換為 1 2 3 4 就可以了。
那麼只要當前下標i 與 nums[i] 不相等我們就交換
比如
5 1 2 3 4
1 != 5 交換為 -> 4 1 2 3 5
1 != 4 交換為 -> 3 1 2 4 5
1 != 3 交換為 -> 2 1 3 4 5
1 != 2 交換為 -> 1 2 3 4 5
第3題也很簡單懶得寫了。
程式碼
import java.util.*;
public class Main {
static final int MAXN = (int) (1e4 + 10);
public static void main(String[] args) {
final long MOD = (long) (1e9 + 7);
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] nums = new int[n + 1];
int cnt = 0;
for(int i = 1; i <= n; i++){
nums[i] = in.nextInt();
}
for(int i = 1;i <= n; i++){
while(nums[i] != i){
int tmp = nums[nums[i]];
nums[nums[i]] = nums[i];
nums[i] = tmp;
cnt++;
}
}
System.out.println(cnt);
}
}