提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
933. 最近的请求次数
题目链接
思路
判断队首元素是否小于t-3000,小于则继续迭代,直到不满足条件,返回队列长度
题解
class RecentCounter {
queue = []
constructor() {
}
ping(t: number): number {
this.queue.push(t);
while (this.queue[0] < t - 3000) {
this.queue.shift();
}
return this.queue.length;
}
}
/**
* Your RecentCounter object will be instantiated and called as such:
* var obj = new RecentCounter()
* var param_1 = obj.ping(t)
*/
2073. 买票需要的时间
题目链接
思路
- 不断模拟出队和入队
- 出队的元素票数若为空,判断编号是否为k,是则返回用去的时间,不是继续入队
题解
function timeRequiredToBuy(tickets: number[], k: number): number {
let i: number, t = 0, front = 0, rear = 0
let data = new Array(20000).fill(0)
for (i = 0; i < tickets.length; i++) {
let a: any = {}
a.pos = i
a.ticket = tickets[i]
data[rear++] = a
}
while (front < rear) {
let p = data[front++]
t++
--p.ticket
if (p.ticket == 0) {
if (p.pos == k) return t
} else {
data[rear++] = p
}
}
return -1
};
641. 设计循环双端队列
题目链接
思路
忽略循环二字,没错就是设计双端队列
题解
class MyCircularDeque {
data: number[]
head: number
tatil: number
count: number
constructor(k: number) {
this.data = new Array(k)
this.head = 0
this.tatil = 0
this.count = 0
}
/** 头插 */
insertFront(value: number): boolean {
if (this.isFull()) return false
this.head = this.head - 1
if (this.head < 0) this.head = this.data.length - 1
this.data[this.head] = value
this.count += 1
return true
}
/** 尾插 */
insertLast(value: number): boolean {
if (this.isFull()) return false
this.data[this.tatil] = value
this.tatil = (this.tatil + 1) % this.data.length
this.count += 1
return true
}
/** 头删 */
deleteFront(): boolean {
if (this.isEmpty()) return false
this.head = (this.head + 1) % this.data.length
this.count -= 1
return true
}
/** 尾删 */
deleteLast(): boolean {
if (this.isEmpty()) return false
this.tatil = (this.tatil - 1 + this.data.length) % this.data.length
this.count -= 1
return true
}
/** 返回头部元素 */
getFront(): number {
if (this.isEmpty()) return -1
return this.data[this.head]
}
/** 返回尾部元素 */
getRear(): number {
if (this.isEmpty()) return -1
return this.data[(this.tatil - 1 + this.data.length) % this.data.length]
}
/** 判断队列是否为空 */
isEmpty(): boolean {
return this.count==0
}
/** 判断队列是否满了 */
isFull(): boolean {
return this.count == this.data.length
}
}
/**
* Your MyCircularDeque object will be instantiated and called as such:
* var obj = new MyCircularDeque(k)
* var param_1 = obj.insertFront(value)
* var param_2 = obj.insertLast(value)
* var param_3 = obj.deleteFront()
* var param_4 = obj.deleteLast()
* var param_5 = obj.getFront()
* var param_6 = obj.getRear()
* var param_7 = obj.isEmpty()
* var param_8 = obj.isFull()
*/