遇见YY

导航

 

时间限制:3000ms

内存限制:589824Kb

题目描述:

有一种排序算法定义如下,该排序算法每次只能把一个元素提到序列的开头,例如2,1,2,4,只需要一次操作把1提到序列起始位置就可以使得原序列从小到大有序。现给你个乱序的1-N的的排序,请你计算最少需要多少次操作才可以使得原序列从小到大有序。

输入描述

  输入第一行包含一个正整数N,表示序列的长度。(1<=N<=100000)

         接下来一行有N个正整数,表示序列中的N个元素,中间用空格隔开。(1<=a_i<=N)

输出描述

  输出仅包含一个正整数,表示最少的操作次数。

样例输入

  4

          2 1 3 4

样例输出

  1

思路:

  找出最长的递增有序的序列。例如:6 8 1 3 2 7 4 9 最长的递增序列长度是8 9。输出8-2=6。本题解法不限于元素范围是1-N,即元素大小任意。

import java.util.Arrays;
import java.util.Scanner;

class Node implements Comparable{
    int value;
    int index;
    public Node(int value,int index){
        this.value = value;
        this.index = index;
    }

    @Override
    public int compareTo(Object o) {
        return this.value - ((Node)o).value;
    }
}


public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int Num = scanner.nextInt();
        Node[] Nodes = new Node[Num];
        for (int i = 0; i < Num; i++) {
            Nodes[i] = new Node(scanner.nextInt(),i);
        }
        Arrays.sort(Nodes);
        int temp = 1;
        for (int i = Num-2; i > -1 ; i--) {
            if (Nodes[i].index > Nodes[i+1].index) {
                System.out.println(Num - temp);
                break;
            }else {
                temp++;
            }
        }
    }
}

  

posted on 2020-07-26 10:40  一骑红尘妃子笑!  阅读(482)  评论(0)    收藏  举报