算法题
https://leetcode-cn.com/problems/implement-queue-using-stacks/
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:
void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false
说明:
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
var MyQueue = function() {this.arr = []this.arr1 = []};/*** @param {number} x* @return {void}*/MyQueue.prototype.push = function(x) {this.arr.push(x)};/*** @return {number}*/MyQueue.prototype.pop = function() {if (this.arr1.length) {return this.arr1.pop()} else {while(this.arr.length) {this.arr1.push(this.arr.pop())}return this.arr1.pop()}};/*** @return {number}*/MyQueue.prototype.peek = function() {let result = this.pop()this.arr1.push(result)return result};/*** @return {boolean}*/MyQueue.prototype.empty = function() {return !(this.arr.length || this.arr1.length)};/*** Your MyQueue object will be instantiated and called as such:* var obj = new MyQueue()* obj.push(x)* var param_2 = obj.pop()* var param_3 = obj.peek()* var param_4 = obj.empty()*/
注意点:
- 只能用两个数组模拟,只能使用push, pop方法,不能出现shift, unshift方法
- peak方法要巧妙利用pop方法的结果
手写题
https://bigfrontend.dev/zh/problem/the-angle-between-hour-hand-and-minute-hand-of-a-clock
请计算出时钟的时针和分针的角度(两个角度的较小者,四舍五入)。时间以HH:mm的格式传入。
angle(‘12:00’) // 0 angle(‘23:30’) // 165
function angle(time) {// your code herelet [h, m] = time.split(':')let mA = Number(m) * 6let hA = (Number(h) % 12) * 30 + Number(m) * 0.5return Math.ceil(Math.min(Math.abs(mA - hA), 360 - Math.abs(mA - hA)))}
注意点:
// 1分钟 分钟走6度
// 360 / 12 = 30
// 1分钟 时钟走0.5度
// 30 / 60 = 0.5
// 24小时制要换算
