2019.08.07笔试题1:神州数码

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);
 
    }
 
     
 
    }

你可能感兴趣的:(2019.08.07笔试题1:神州数码)