时间限制: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++; } } } }