933. 最近的请求次数

方法1:queue

  1. var RecentCounter = function() {ÏÏÏ
  2. this.queue = []; // 初始化一个属性队列
  3. };
  4. /**
  5. * @param {number} t
  6. * @return {number}
  7. */
  8. RecentCounter.prototype.ping = function(t) {
  9. // 入队
  10. this.queue.push(t);
  11. // 出队
  12. while(this.queue[0] < t - 3000){
  13. this.queue.shift(); // 移除第一个成员(第二个成员将变为第一个成员,继续判断是否需要移除新的第一个成员。)
  14. }
  15. return this.queue.length; // 返回符合条件的队列成员数量
  16. };
  17. /**
  18. * Your RecentCounter object will be instantiated and called as such:
  19. * var obj = new RecentCounter()
  20. * var param_1 = obj.ping(t)
  21. */

977. 有序数组的平方

方法1 「暴力解法」

  1. var sortedSquares = function (nums) {
  2. return nums.map(item => item * item).sort((a, b) => a - b);
  3. };

直接调用原生的 api 来解决,这是最先想到的法子。。。

方法2 「双指针」

  1. var sortedSquares = function (nums) {
  2. const result = [];
  3. let left = 0,
  4. right = nums.length - 1;
  5. while (left <= right) {
  6. const l_num = Math.abs(nums[left]);
  7. const r_num = Math.abs(nums[right])
  8. if (l_num > r_num) {
  9. result.unshift(l_num * l_num);
  10. left++;
  11. } else {
  12. result.unshift(r_num * r_num);
  13. right--;
  14. }
  15. }
  16. return result;
  17. };

解题思路:

  • 提前准备好一个数组 result,用于存放最终的结果数据;
  • 从两端向中间依次遍历数组 nums 的每一项,由于数组是升序排序的,所以平方之后的,从两端到中间,必然是由大到小;
  • 依次将偏大的成员插入到 result 的头部,随后向中间偏移,直到两指针碰撞,最后将结果 result 给返回即可;