据说是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);}