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

image

抽象出来的题目是:
在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);
        }



    }
}
posted @ 2026-04-08 21:18  Jwwind  阅读(8)  评论(0)    收藏  举报