有序数组的平方
考虑到数组中元素存在负数的情况,数组元素平方之后,最大值存在于新数组的两边,这里采用“双指针法”可以满足时间复杂度为O(n)
若对数组中的元素平方之后再去排序,可以采用快速排序的方式,此时的时间复杂度为O(nlogn)
这里给出双指针的解法、
/** * @param {number[]} nums * @return {number[]} */ let sortedSquares = function(nums) { let n = nums.length; let newNums = new Array(n).fill(0);g let i = 0, j = n - 1, k = n -1; while(i <= j) { let left = nums[i] * nums[i]; let right = nums[j] * nums[j]; if(left < right) { newNums[k--] = right; j--; } else { newNums[k--] = left; i++; } } return newNums; };长度最小的子数组
采用双指针的方法实现滑动窗口
O(n)
O(nlog(n))
/** * @param {number} target * @param {number[]} nums * @return {number} */ var minSubArrayLen = function(target, nums) { //滑动窗口方法 //记录窗口大小的指针 let start = 0; let end = 0; //窗口内的值 let sum = 0; //窗口最短长度 let len = Infinity;while(end < nums.length) { sum += nums[end]; while(sum >= target) { len = Math.min(len, end - start + 1); sum -= nums[start]; start++; } end++; } return len === Infinity ? 0 : len; };