LeetCode933

  过于追求完美,可能什么都得不到。前面几次由于没解决所有的四道题,已经错过了好几周的总结了。与其什么都没有,还不如做多少写多少。

问题:933. 最近的请求次数

写一个 RecentCounter 类来计算最近的请求。

它只有一个方法:ping(int t),其中 t 代表以毫秒为单位的某个时间。

返回从 3000 毫秒前到现在的 ping 数。

任何处于 [t - 3000, t] 时间范围之内的 ping 都将会被计算在内,包括当前(指 t 时刻)的 ping

保证每次对 ping 的调用都使用比之前更大的 t 值。

链接:https://leetcode-cn.com/contest/weekly-contest-109/problems/number-of-recent-calls/

分析:

维护一个队列,,得到新值后根据条件刷新。最终返回大小即可。STL中vector比较熟,用这个存储数据。

AC Code:

class RecentCounter {
public:
	vector<int> Pings;
	RecentCounter()
	{
		this->Pings.clear();
	}
	int ping(int t)
	{
		if (this->Pings.size() == 0)
		{
			this->Pings.emplace_back(t);
		}
		else
		{
            this->Pings.emplace_back(t);
			while (this->Pings[0]+3000<t)
			{
				this->Pings.erase(this->Pings.begin());
			}
		}
		return this->Pings.size();
	}
};

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

  

其他:

第一code:

typedef long long ll;
typedef vector<int> VI;
typedef pair<int,int> PII;

#define REP(i,s,t) for(int i=(s);i<(t);i++)
#define FILL(x,v) memset(x,v,sizeof(x))

const int INF = (int)1E9;
#define MAXN 100005

class RecentCounter {
public:
  VI pings;
  int h;
  RecentCounter() {
    h = 0;
    pings.clear();
  }

  int ping(int t) {
    pings.push_back(t);
    while (h < pings.size() && pings[h] < t - 3000) h++;
    return (int)pings.size() - h;
  }
};

 

猜你喜欢

转载自www.cnblogs.com/youdias/p/9903417.html