题意:
从原数组中提出一些数,使得剩余的
k
k
k 个数形成一个从
1
1
1 到
k
k
k 的升序排列。
如果无论怎样都无法凑出长度
≥
1
\geq 1
≥1的序列的话,就输出
−
1
-1
−1。
思路:
其实这道题不用想太多,只需要从左到右,直接贪心从
1
1
1 开始取即可。
显而易见,只有之前已经取过
1
…
…
i
−
1
1……i-1
1……i−1 时,之后的
i
i
i 才有用。
如果原数列中没有出现过 1 1 1 的话,自然而然地,无法形成一个从 1 1 1 开始递增的序列,所以输出 − 1 -1 −1 即可。
时间复杂度: O ( n ) O(n) O(n)
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
int n;
cin >> n;
int j = 1;
for (int i = 1, x; i <= n; i++) {
scanf("%lld", &x);
if (x == j)
j++;
}
if(j>1) cout << n - j + 1;
else cout<<-1;
return 0;
}