据说是2020浪潮笔试

时间限制:C / C + +语言
1000
MS;其他语言
3000
MS
内存限制:C / C + +语言
131072
KB;其他语言
655360
KB
题目描述:
沙滩按照线型摆放着n个大小不一的球形石头,已知第i个石头的半径为ri,且不存在两个石头有相同的半径。为了使石头的摆放更加美观,现要求摆放的石头的半径从左往右依次递增。因此,需要对一些石头进行移动,每次操作可以选择一个石头,并把它放在剩下n−1
个石头在最左边或最右边。问最少需要操作多少次才能将这n个石头的半径变成升序?
输入
第一行一个整数n,表示石头的个数。(1 <= n <= 100000)
第二行n个整数,表示从左往右石头的半径r1,r2,...,rn。(1 <= ri <= n),且保证不存在两个不同的石头拥有相同的半径。
输出
最少操作次数
样例输入
5
4 1 2 5 3
样例输出
2

样例输入

6
3 2 1 4 6 5

样例输出

3

解题报告:

自己想想。

AC代码:

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
int[] dp = new int[200005];
Arrays.fill(dp,1);
dp[0] = 0;
int max = 1;
for (int i = 1; i < n; i++) {
dp[arr[i]] = dp[arr[i]-1]+1;
max = Math.max(max,dp[arr[i]]);
}
System.out.println(n-max);
}