/** 单调栈;每次取得数据都比上一次的更小
* @auther start
* @create 2023-12-12 22:18
*/
public class L1673 {
public int[] mostCompetitive(int[] nums, int k) {
int len = nums.length;
// 表示可以出栈的次数,如果delete小于0说明栈中的个数小于k
int delete = len - k;
Deque<Integer> stack = new LinkedList<>();
//遍历数组,
for (int i = 0; i < len; i++) {
// 栈不为空,栈顶元素较大,delete>0,则栈顶元素出栈
while (!stack.isEmpty() && stack.peek() > nums[i] && delete > 0) {
stack.pop();
delete--;
}
stack.push(nums[i]);
}
// 此时delete大于0说明栈中的元素大于k。需要出栈
while (delete > 0) {
stack.pop();
delete--;
}
int res[] = new int[k];
for (int i = k - 1; i >= 0; i--) {
res[i] = stack.pop();
}
return res;
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务