2019.08.07笔试题1:
有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的度度熊只会下面这个操作:
任取数组中的一个数然后将它放置在数组的最后一个位置。
问最少操作多少次可以使得数组从小到大有序?
输入描述:
首先输入一个正整数N,接下来的一行输入N个整数。(N <= 50, 每个数的绝对值小于等于1000)
输出描述:
输出一个整数表示最少的操作次数。
输入例子1:
4
19 7 8 25
输出例子1:
2
个人思路:
思路就是,原先数组跟有序数组相比较,最小的情况是操作几次,不考虑数组的长度,只考虑需要把数组插入数组最后一个位置几次?
其实我个人的看法就是:找到多少个元素排在最小元素的前面,再然后就是找到多少个元素排在第二个元素前面,以此类推、
package niuke1;
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main (String args[]){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
// 原来数组
int[] arr = new int[n];
// 排好序的数组
int[] sortArr = new int[n];
for(int i = 0; i < n; i++){
arr[i] = scan.nextInt();
sortArr[i] = arr[i];
}
Arrays.sort(sortArr);
// 意味着多少个元素不需要挪
int count = 0;
int j = 0;
for(int i = 0;i < n; i++){
if(arr[i] == sortArr[j]){
// 因为j=0,sortArr[j]一开始是在原先的数组找对应的count
count++;
j++;
// 找到对应的元素在之前的位置,sortArr下一位就是第二位比较小的数
}
}
// 总数-减去不需要挪动的,因为题目本身要求是任取数字,而且要求是最少次数操作
System.out.println(n - count);
}
}