算法题

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(双端队列)来模拟一个栈,只要是标准的栈操作即可。

  1. var MyQueue = function() {
  2. this.arr = []
  3. this.arr1 = []
  4. };
  5. /**
  6. * @param {number} x
  7. * @return {void}
  8. */
  9. MyQueue.prototype.push = function(x) {
  10. this.arr.push(x)
  11. };
  12. /**
  13. * @return {number}
  14. */
  15. MyQueue.prototype.pop = function() {
  16. if (this.arr1.length) {
  17. return this.arr1.pop()
  18. } else {
  19. while(this.arr.length) {
  20. this.arr1.push(this.arr.pop())
  21. }
  22. return this.arr1.pop()
  23. }
  24. };
  25. /**
  26. * @return {number}
  27. */
  28. MyQueue.prototype.peek = function() {
  29. let result = this.pop()
  30. this.arr1.push(result)
  31. return result
  32. };
  33. /**
  34. * @return {boolean}
  35. */
  36. MyQueue.prototype.empty = function() {
  37. return !(this.arr.length || this.arr1.length)
  38. };
  39. /**
  40. * Your MyQueue object will be instantiated and called as such:
  41. * var obj = new MyQueue()
  42. * obj.push(x)
  43. * var param_2 = obj.pop()
  44. * var param_3 = obj.peek()
  45. * var param_4 = obj.empty()
  46. */

注意点:

  1. 只能用两个数组模拟,只能使用push, pop方法,不能出现shift, unshift方法
  2. 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

  1. function angle(time) {
  2. // your code here
  3. let [h, m] = time.split(':')
  4. let mA = Number(m) * 6
  5. let hA = (Number(h) % 12) * 30 + Number(m) * 0.5
  6. return Math.ceil(Math.min(Math.abs(mA - hA), 360 - Math.abs(mA - hA)))
  7. }

注意点:
// 1分钟 分钟走6度
// 360 / 12 = 30
// 1分钟 时钟走0.5度
// 30 / 60 = 0.5
// 24小时制要换算