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