2019.08.07筆試題1:
有一個N個數(shù)的數(shù)組,他想將數(shù)組從小到大 排好序,但是萌萌的度度熊只會下面這個操作:
任取數(shù)組中的一個數(shù)然后將它放置在數(shù)組的最后一個位置。
問最少操作多少次可以使得數(shù)組從小到大有序?
輸入描述:
首先輸入一個正整數(shù)N,接下來的一行輸入N個整數(shù)。(N <= 50, 每個數(shù)的絕對值小于等于1000)
輸出描述:
輸出一個整數(shù)表示最少的操作次數(shù)。
輸入例子1:
4
19 7 8 25
輸出例子1:
2
個人思路:
思路就是,原先數(shù)組跟有序數(shù)組相比較,最小的情況是操作幾次,不考慮數(shù)組的長度,只考慮需要把數(shù)組插入數(shù)組最后一個位置幾次?
其實(shí)我個人的看法就是:找到多少個元素排在最小元素的前面,再然后就是找到多少個元素排在第二個元素前面,以此類推、
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();
// 原來數(shù)組
int[] arr = new int[n];
// 排好序的數(shù)組
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]){
// 因?yàn)閖=0,sortArr[j]一開始是在原先的數(shù)組找對應(yīng)的count
count++;
j++;
// 找到對應(yīng)的元素在之前的位置,sortArr下一位就是第二位比較小的數(shù)
}
}
// 總數(shù)-減去不需要挪動的,因?yàn)轭}目本身要求是任取數(shù)字,而且要求是最少次數(shù)操作
System.out.println(n - count);
}
}