977.有序数组的平方
思路是双指针,因为是非递减数组,所以最大值在数组两端,所以两个指针从数组两边往中间遍历。同时因为能确定最大值的位置但是不能确定最小值的位置,所以新的数组是倒序遍历。
/**
* @param {number[]} nums
* @return {number[]}
*/
var sortedSquares = function(nums) {
let left = 0;
let right = nums.length - 1;
let res = new Array(nums.length).fill(0);
let k = right;
while(left <= right) {
let i = nums[left] * nums[left];
let j = nums[right] * nums[right];
if (i < j) {
res[k--] = j;
right--;
} else {
res[k--] = i;
left++;
}
}
return res;
};
209. 长度最小的子数组
/**
* @param {number} target
* @param {number[]} nums
* @return {number}
*/
var minSubArrayLen = function(target, nums) {
let result = Infinity;
let sum = 0;
let j = 0;
for (let i = 0; i < nums.length; i++) {
sum += nums[i];
while(sum >= target) {
const currentLen = i - j + 1;
result = currentLen < result ? currentLen : result;
// 重点在于移动窗口的起始端点
sum -= nums[j];
j++;
}
}
return result === Infinity ? 0 : result;
};