题目意思很好理解,就是维护一个单调栈。
class Solution { public: vector<int> mostCompetitive(vector<int>& nums, int k) { int n = nums.size(); if(k == n) return nums; stack<int> st; for(int i = 0; i < n; i++) { while(!st.empty() && st.top() > nums[i] && k - st.size() < n - i) { st.pop(); } if (st.size() < k) { st.push(nums[i]); } } vector<int> ans; while(!st.empty()) { ans.push_back(st.top()); st.pop(); } reverse(ans.begin(), ans.end()); return ans; } };
这么写居然还能双百,挺离谱的。后来想了想,完全不用stack
class Solution { public: vector<int> mostCompetitive(vector<int>& nums, int k) { int n = nums.size(); if(k == n) return nums; vector<int> ans; for(int i = 0; i < n; i++) { while(ans.size() != 0 && ans.back() > nums[i] && k - ans.size() < n - i) { ans.pop_back(); } if (ans.size() < k) { ans.push_back(nums[i]); } } return ans; } };
评论
还没有任何评论,你来说两句吧!