【蓝桥杯模拟赛】2026/4/8 栈

抽象出来的题目是:
在n个数里删除k个数,使这n个数合起来的这个数最大,每个数的顺序不能变
解题思路:
利用栈,如果栈顶元素小于当前数并且还没有删完k个,就把栈顶元素弹出直到栈顶元素大于当前数,再把当前数加入。
需要考虑边界情况:
就是如果遍历完了都没有删完k个,那我们就直接从栈底遍历栈N-k个元素
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N=sc.nextInt();
int k=sc.nextInt();
int kk=k;
Stack<Integer> stack=new Stack<>();
String ss=sc.next();
for (int i = 0; i < N; i++) {
int x=Integer.parseInt(String.valueOf(ss.charAt(i)));
if(!stack.isEmpty()) {
while (!stack.isEmpty() && stack.peek() < x && kk > 0) {
stack.pop();
kk--;
}
}
stack.push(x);
}
String ans="";
if(kk==0){
for(int ch:stack){
ans=ans+ch;
}
System.out.println(ans);
}else{
int count=0;
for (int ch:stack){
if(count>=N-k)break;
ans+=ch;
count++;
}
System.out.println(ans);
}
}
}

浙公网安备 33010602011771号