# 基本用法

  • 一个先进先出的数据结构
const queue = []
// 入队
queue.push(1)
queue.push(2)
// 出队
const item1 = queue.shift()
const item2 = queue.shift()

# 使用场景

  • js 异步中的任务队列:JS 是单线程,无法同时处理异步中的并发任务。
  • 计算最近请求次数

# 算法题:最近的请求次数:

写一个 RecentCounter 类来计算特定时间范围内最近的请求。

请你实现 RecentCounter 类:

RecentCounter() 初始化计数器,请求数为 0 。
int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。
保证 每次对 ping 的调用都使用比之前更大的 t 值。

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

const RecentCounter = function() {
    this.q = []
};

/** 
 * @param {number} t
 * @return {number}
 */
RecentCounter.prototype.ping = function(t) {
    this.q.push(t);
    while(this.q[0] < t - 3000) {
        this.q.shift();
    };
    return this.q.length;
};

# 算法题:回文检查器

function palindromeChecker(aString) {
  if (aString === undefined || aString === null || (aString !== null && aString.length === 0)) {
    return false
  }
  const deque = []
  const lowerString = aString.toLocaleLowerCase().split(' ').join('')
  let isEqual = true
  let firstChar, lastChar

  for (let i = 0; i < lowerString.length; i++) {
    deque.push(lowerString.charAt(i))
  }

  while(deque.length > 1 && isEqual) {
    firstChar = deque.shift()
    lastChar = deque.pop()
    if (firstChar !== lastChar) {
      isEqual = false
    }
  }
  return isEqual
}

console.log('a', palindromeChecker('a'))
console.log('aa', palindromeChecker('aa'))
console.log('kayak', palindromeChecker('kayak'))
console.log('level', palindromeChecker('level'))
console.log('Was it a car or a cat I saw', palindromeChecker('Was it a car or a cat I saw'))
console.log('Step on no pets', palindromeChecker('Step on no pets'))

# 算法题:回文数检查器

const isPalindrome = function(x) {
  if(x < 0) return false;
  const num = x.toString();
  const reverStr = [...num].reverse().join('');
  return num === reverStr;
}

评 论:

更新: 12/15/2020, 4:59:39 PM