// 方法二:双指针法(时间优) var sortedSquares = function(nums) { let len = nums.length; let newArray = newArray(len); let left = 0, right = len - 1, n = len - 1; while (left <= right) { let leftN = nums[left] ** 2, rightN = nums[right] ** 2; if (leftN < rightN) { newArray[n--] = rightN; right --; } else { newArray[n--] = leftN; left ++; } } return newArray; };
// 超时做法 var minSubArrayLen = function(target, nums) { let len = nums.length; let sum = 0; let minL = len + 1; let subL = 0; for(let i=0; i<len; i++) { sum = 0; for(let j=i; j<len; j++) { sum += nums[j]; if (sum >= target) { subL = (j-i) + 1; minL = minL < subL ? minL: subL; } } } return minL > len ? 0 : minL; };
// 正确做法(时间优) var minSubArrayLen = function(target, nums) { const len = nums.length; let left = right = sum = 0; // left,right分别为滑动窗口的起始和终点 let minL = len + 1; // 子数组最长数组都不应大于自身长度 while (right < len) { sum += nums[right]; // 滑动窗口 while (sum >= target) { let subL = right - left + 1; minL = minL < subL ? minL : subL; //始终保持最小长度 sum -= nums[left ++] // 试着减去起始数 } right ++; // 整体右移动 } return minL > len ? 0 : minL; };
螺旋矩阵II
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。