933. 最近的请求次数
方法1:queue
var RecentCounter = function() {ÏÏÏthis.queue = []; // 初始化一个属性队列};/*** @param {number} t* @return {number}*/RecentCounter.prototype.ping = function(t) {// 入队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)*/
977. 有序数组的平方
方法1 「暴力解法」
var sortedSquares = function (nums) {return nums.map(item => item * item).sort((a, b) => a - b);};
直接调用原生的 api 来解决,这是最先想到的法子。。。
方法2 「双指针」
var sortedSquares = function (nums) {const result = [];let left = 0,right = nums.length - 1;while (left <= right) {const l_num = Math.abs(nums[left]);const r_num = Math.abs(nums[right])if (l_num > r_num) {result.unshift(l_num * l_num);left++;} else {result.unshift(r_num * r_num);right--;}}return result;};
解题思路:
- 提前准备好一个数组 result,用于存放最终的结果数据;
- 从两端向中间依次遍历数组 nums 的每一项,由于数组是升序排序的,所以平方之后的,从两端到中间,必然是由大到小;
- 依次将偏大的成员插入到 result 的头部,随后向中间偏移,直到两指针碰撞,最后将结果 result 给返回即可;
