Leetcode周赛

这次参加力扣第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/
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值