美文网首页经典笔试题
2019.08.07笔试题1:神州数码

2019.08.07笔试题1:神州数码

作者: xm的那年 | 来源:发表于2019-08-08 01:36 被阅读0次

    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:神州数码

        本文链接:https://www.haomeiwen.com/subject/jaozdctx.html