嘛,打开力扣,不知道为啥突然感觉可以看眼每日一题。还是困难!?
上面是本人昨天的自不量力。。。直接被狠狠拷打,看到评论区有句话很不错,当一个题是困难而我第一想法就是暴力,那可以睡觉了。
写一个 RecentCounter
类来计算特定时间范围内最近的请求。
请你实现 RecentCounter
类:
RecentCounter()
初始化计数器,请求数为 0 。int ping(int t)
在时间 t
添加一个新请求,其中 t
表示以毫秒为单位的某个时间,并返回过去 3000
毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t]
内发生的请求数。保证 每次对 ping
的调用都使用比之前更大的 t
值。
示例 1:
输入:
["RecentCounter", "ping", "ping", "ping", "ping"]
[[], [1], [100], [3001], [3002]]
输出:
[null, 1, 2, 3, 3]
解释:
RecentCounter recentCounter = new RecentCounter();
recentCounter.ping(1); // requests = [1],范围是 [-2999,1],返回 1
recentCounter.ping(100); // requests = [1, 100],范围是 [-2900,100],返回 2
recentCounter.ping(3001); // requests = [1, 100, 3001],范围是 [1,3001],返回 3
recentCounter.ping(3002); // requests = [1, 100, 3001, 3002],范围是 [2,3002],返回 3
class RecentCounter {
LinkedList<Integer> queue=new LinkedList<>();
public RecentCounter() {
}
public int ping(int t) {
while(!queue.isEmpty()){
if(t-queue.peek()>3000){
queue.poll();
}else{
break;
}
}
queue.offer(t);
return queue.size();
}
}
class RecentCounter {
public:
queue<int>q;
RecentCounter() {
}
int ping(int t) {
while(!q.empty()){
if(t-q.front()>3000){
q.pop();
}
else {
break;
}
}
q.push(t);
return q.size();
}
};
额,这个队列函数名有点?,搞得我还去clion那边去看c++队列的函数是什么样子。
给定一个窗口大小和一个整数数据流,根据该滑动窗口的大小,计算滑动窗口里所有数字的平均值。
实现 MovingAverage
类:
MovingAverage(int size)
用窗口大小 size
初始化对象。double next(int val)
成员函数 next
每次调用的时候都会往滑动窗口增加一个整数,请计算并返回数据流中最后 size
个值的移动平均值,即滑动窗口里所有数字的平均值。示例:
输入:
inputs = ["MovingAverage", "next", "next", "next", "next"]
inputs = [[3], [1], [10], [3], [5]]
输出:
[null, 1.0, 5.5, 4.66667, 6.0]
解释:
MovingAverage movingAverage = new MovingAverage(3);
movingAverage.next(1); // 返回 1.0 = 1 / 1
movingAverage.next(10); // 返回 5.5 = (1 + 10) / 2
movingAverage.next(3); // 返回 4.66667 = (1 + 10 + 3) / 3
movingAverage.next(5); // 返回 6.0 = (10 + 3 + 5) / 3
class MovingAverage {
LinkedList<Integer>queue=new LinkedList<>();
int size;
/** Initialize your data structure here. */
public MovingAverage(int size) {
this.size=size;
}
public double next(int val) {
if(queue.size()==size){
queue.poll();
}
queue.offer(val);
double sum=0;
for(int x:queue){
sum+=x;
}
return sum/queue.size();
}
}
给你一个整数数组 nums
,返回数组中最大数和最小数的 最大公约数 。
两个数的 最大公约数 是能够被两个数整除的最大正整数。
示例 1:
输入:nums = [2,5,6,9,10]
输出:2
解释:
nums 中最小的数是 2
nums 中最大的数是 10
2 和 10 的最大公约数是 2
示例 2:
输入:nums = [7,5,6,8,3]
输出:1
解释:
nums 中最小的数是 3
nums 中最大的数是 8
3 和 8 的最大公约数是 1
示例 3:
输入:nums = [3,3]
输出:3
解释:
nums 中最小的数是 3
nums 中最大的数是 3
3 和 3 的最大公约数是 3
class Solution {
public int GCD(int a,int b){
int c=b%a;
while(c!=0){
b=a;
a=c;
c=b%a;
}
return a;
}
public int findGCD(int[] nums) {
Arrays.sort(nums);
int max=nums[nums.length-1];
int min=nums[0];
return GCD(max,min);
}
}
大一死去的记忆正在攻击我,虽然知道辗转相除法,但是也就记得名字了,我tm直接哭死