# 1673. Find the Most Competitive Subsequence ###### tags: `Leetcode` `Medium` `Stack` Link: https://leetcode.com/problems/find-the-most-competitive-subsequence/ ## 思路 $O(N)$ $O(k)$ If current element a is smaller then the last element in the stack, we can replace it to get a smaller sequence. Before we do this, we need to check if we still have enough elements after. After we pop the last element from stack, we have $stack.size()-1$ in the stack, there are $nums.size()-i$ can still be pushed. if $stack.size()-1+nums.size()-i\geq k$, we can pop the stack. Then, is the stack not full with $k$ element, we push $nums[i]$ into the stack. Finally we return stack as the result directly. ## Code ```java= class Solution { public int[] mostCompetitive(int[] nums, int k) { Stack<Integer> stack = new Stack<>(); for(int i=0; i<nums.length; i++){ while(!stack.isEmpty() && nums[i]<stack.peek() && nums.length-i-1>=k-stack.size()){ stack.pop(); } if(stack.size()<k) stack.push(nums[i]); } int[] ans = new int[k]; int idx = k-1; while(idx>=0) ans[idx--]=stack.pop(); return ans; } } ```