时间限制: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++;
}
}
}
}
浙公网安备 33010602011771号