题目描述
牛牛有一个长度为n的整数序列,牛牛想对这个序列进行重排为一个非严格升序序列。牛牛比较懒惰,他想移动尽量少的数就完成重排,请你帮他计算一下他最少需要移动多少个序列中的元素。(当一个元素不在它原来所在的位置,这个元素就是被移动了的)
输入描述:
输入包括两行,第一行一个整数n(1 ≤ n ≤ 50),即序列的长度 第二行n个整数x[i](1 ≤ x[i] ≤ 100),即序列中的每个数
输出描述:
输出一个整数,即最少需要移动的元素个数
思路:
设排序前数组位 3 2 1
排序后的数组位 1 2 3
我们需要比较每一个元素在排序前后在数组中的位置即可,比如排序前数组的第一个元素位3 排序后则位1 意思是我们需要把1移动到最前面,就动用了一次元素的位置,排序前数组中的第二个元素位2,排序后的第二个元素也为2 所以我们不需要移动数组中的第二个元素的位置,移动次数没有发生变化
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
int a[] = new int[n];
for (int i = 0; i < n; i++) {
a[i] = cin.nextInt();
}
int b[] = new int[n];
b = a.clone();
Arrays.sort(b);
int sum = 0;
for(int i = 0;i<n;i++) {
if(a[i] != b[i])sum++;
}
System.out.print(sum);
}
}
放代码