简单的数组交换问题
链接:https://www.nowcoder.com/questionTerminal/c0c246fca3c74541bdd66db874718e28
来源:牛客网
输入包括两行, 第一行包括一个正整数n(2 <= n <= 10^5), 表示排列的长度和范围。 第二行包括n个正整数p1, p2, p3,...,pn, 即妞妞得到的排列, 保证是一个1~n的排列。
希望做最少的操作就使排列满足要求:对于所有的1 <= i <= n, 都满足pi ≠ i 。
输出描述:
输出一个整数, 表示妞妞需要的操作次数。
示例1
输入
5 1 4 3 5 2
输出
2
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = Integer.parseInt(scanner.next());
int[] P = new int [n];
for(int i = 0;i< n ;i++){
P[i] = Integer.parseInt(scanner.next());
}
int cnt = 0;
for(int i = 0;i < n-1;i++){
if(P[i] == i+1){ //这里是i+1 不是i
swap(P[i],P[i+1]);
cnt++;
i++;//如果交换了,那么直接跳到下一个未参与过交换的位置
}
}
System.out.print(cnt);
}
public static void swap(int i,int j){
int temp = i;
i = j ;
j = temp;
}
}