c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
// 移除K个数字使得剩下的数字最小,单调栈,每轮栈顶都是最小的,每次踢掉,直到k个
// 每次后面的数字比前面的大就要去掉,去除直到k个
int main()
{
char a[] = "1422219";
// char a[]="10200";
int k = 3;
char stack[strlen(a)];
int top = -1;
int j = 0;
while (j < strlen(a)) {
// 当栈顶元素大于当前元素,且仍然可以移除字符时,弹出栈顶,注意是while
while (top >= 0 && k > 0 && stack[top] > a[j]) {
top--; // 弹出栈顶
k--; // 减少需要移除的字符数
}
// 将当前字符压入栈
stack[++top] = a[j];
j++;
}
top -= k;
for (int i = 0; i <= top; i++) {
printf("%c", stack[i]);
}
return 0;
}