队列练习--------最近的请求次数(LeetCode 933)

题目:点这里

解法:

cpp 复制代码
class RecentCounter {
    queue<int> q;
public:
    RecentCounter() {
        
    }
    
    int ping(int t) {
        q.push(t);
        while(t-3000>q.front()){
            q.pop();
        }
        return q.size();
    }
};

/**
 * Your RecentCounter object will be instantiated and called as such:
 * RecentCounter* obj = new RecentCounter();
 * int param_1 = obj->ping(t);
 */

这个题目我最初并未看懂,看了老师以及评论区各位大神的题解才豁然开朗,我们要写一个类,这个类的功能很简单,就是用一个数组存储输入的值,然后用一个变量计数,每输入一次数就返回一次满足条件的个数,鉴于这个题目的特性,不满足的数出现在数组头部,而插入的数字又是从尾部,所以恰好符合队列的特性,于是这个题目利用队列我们可以有条不紊地解决,利用入队将元素存入队列,利用出队弹出不符合条件的数,返回队列的长度就是满足条件的元素个数。

我的解法挺低效的哈哈,不过这代表我懂了,并且让我知道我对顺序表的使用愈发熟练啦:

我的解法:

cpp 复制代码
class RecentCounter {
private:
    vector<int> ret;
    int cnt;
public:
    RecentCounter() {
        cnt=0;
    }
    
    int ping(int t) {
        ret.push_back(t);
        cnt=ret.size();
        for(int i=0;i<ret.size();i++){
            if(ret[i]<t-3000){
                cnt--;
            }else{
                break;
            }
        }
        return cnt;
    }
};

/**
 * Your RecentCounter object will be instantiated and called as such:
 * RecentCounter* obj = new RecentCounter();
 * int param_1 = obj->ping(t);
 */

反思

现在开始了队列部分的学习,让我有了一个体会,数据结构中的各种模型,都可以用普通的数组和变量来平替,虽然说麻烦了些,但是我还是更习惯那些基础的写法,所以现在需要树立一种意识,主动去总结归纳适合于队列或栈或链表的题目,然后有的放矢,这样才能事半功倍。

相关推荐
.道阻且长.4 小时前
2.LeetCode算法习题讲解--双指针--复写零
算法·leetcode·职场和发展
·薯条大王4 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
To_OC5 小时前
LC 438 找到所有字母异位词:暴力超时后,我靠滑动窗口一招搞定
javascript·算法·leetcode
白狐_7986 小时前
408数据结构第5章:二叉树遍历序列题——技巧、判断与真题型总结
数据结构
Forever Nore8 小时前
学完C语言力扣第一题做不来正常吗
数据结构·算法
hansang_IR9 小时前
【题解】LC:倍增 / 区间并查集(Range Parallel Unionfind)
c++·算法·并查集
东东最爱敲键盘9 小时前
day7.c++继承
c++
沫璃染墨10 小时前
《从零入门Linux系统篇(十五):系统工具篇·六——GDB调试器详解:从程序执行控制到高级调试技巧》
linux·运维·服务器·c语言·c++
吃着火锅x唱着歌10 小时前
Effective C++ 学习笔记 条款40 明智而审慎地使用多重继承
c++·笔记·学习
Tisfy10 小时前
LeetCode 3731.找出缺失的元素:哈希 / 排序
算法·leetcode·哈希算法·排序·哈希表