这次参加力扣第217场周赛
自己只写出了两道,第三题运行时已经超时了,最后面反省自己感觉就是自己的查找算法的时间复杂度太高了
同时在星期六时也参加了全国高校计算机能力挑战赛中的C语言竞赛项目
不断的将自己所学的理论知识结合实践去使用,发现自己还是存在一定不足的,比如在写题时代码书写不太规范以及一些变量、类命名没有使用相应的驼峰法,更一层次说明自己依旧不够细节
这种学习作风需要改变
言归正传:
下面是我写leetcode题目超时题目的详解:
找出最具竞争力的子序列
参考题解:
这道题本质是一个经典的单调栈问题,找出特定长度的**递增**序列。也涉及到了**贪心**的思想 所谓单调栈就是维护一个栈么,该栈要么是单调递增的,要么是单调递减。本题我们要维护一个单调递增的栈,每当遍历到一个新的元素时,将该元素与栈顶元素比较,如果该元素小于栈顶元素则弹出栈顶元素,直到与栈顶元素相等或大于栈顶元素即可。同时我们要维护一个变量count,来记录我们最多可以删除多少个元素,所谓删除元素就是从栈内弹出元素,**我们最多能删除n-k个元素**。
*我觉得他这里的n-k就设置的很灵性,这是我想不到的地方,这样就不需要去考虑后面元素不够*
class Solution {
public:
vector<int> mostCompetitive(vector<int>& nums, int k) {
vector<int> ans;
int n = nums.size(), count = n - k;
for (int i = 0; i < nums.size(); i++) {
while (ans.size() > 0 && nums[i] < ans.back() && count > 0) {
ans.pop_back();
count--;
}
ans.push_back(nums[i]);
}
while (ans.size() > k)
ans.pop_back();
return ans;
}
};
作者:wsy-is-god 链接:https://leetcode-cn.com/problems/find-the-most-competitive-subsequence/solution/c-zhao-chu-zui-ju-jing-zheng-li-de-zi-xu-lie-dan-d/