Kattis Problem-Missing Gnomes
题目类型:贪心
题意
给定 n 的排列的一个子序列,然后求出在 n 的排列中含有该子序列且字典序最小的排列。
分析
贪心,想要最终的字典序最小,那么可以维护一个在子序列中未出现数字的集合,然后依次枚举每一个位,每次选子序列中和未使用的数字中较小的那个来填充。
代码
public static void solve() throws IOException {
int n = nextInt();
int m = nextInt();
int[] a = new int[m];
boolean[] vis = new boolean[n + 1];
for (int i = 0; i < m; i++) {
a[i] = nextInt();
vis[a[i]] = true;
}
int inx = 1;
for (int i = 0; i < m; i++) {
while (inx < n && vis[inx]) inx++;
if (inx <= n && inx < a[i]) {
pw.println(inx);
vis[inx] = true;
i--;
} else pw.println(a[i]);
}
while (inx <= n && !vis[inx]) pw.println(inx++);
}