算法:从n位数,删除m个数,返回最大值 --- 单调栈的应用

package com.lhb.stack;

import java.util.Deque;
import java.util.LinkedList;

/**
* @author lhb
* @date 2022/3/12
*/
public class StackTest {
public static int stackTest01(int[] nums, int m) {
int len = 0;
Deque<Integer> stack = new LinkedList<>();
stack.push(nums[0]);
for (int i = 1; i < nums.length; i++) {
// 当前站不为空,当前m 》 0 、如果当前栈顶元素小于nums[i],则m--且弹出栈顶元素
while (!stack.isEmpty() && m > 0 && stack.peekLast() < nums[i]) {
stack.pollLast();
m--;
}
stack.offerLast(nums[i]);
}
// 当前的数是一个单调递减的数,需要判断m是否为0
while (m > 0) {
stack.pollLast();
m--;
}
while(!stack.isEmpty()) {
len = len * 10 + stack.pollFirst();
}
return len;
}
public static void main(String[] args) {
int[] nums = {9,8,7,6,5,4,3,2,1};
System.out.println(stackTest01(nums, 2));
}
}
posted @   牵魂  阅读(83)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示