977.有序数组的平方
给你一个按 非递减顺序 排序的整数数组
nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序
思路:1.直接map,然后排序
2.双指针:利用数组左右两边平方最大的特点
var sortedSquares = function (nums) {
const res = new Array(nums.length)
let left = 0
let right = nums.length - 1
let k = nums.length - 1
while (k >= 0) {
if (nums[left] * nums[left] > nums[right] * nums[right]) {
res[k--] = nums[left] * nums[left]
left++
} else {
res[k--] = nums[right] * nums[right]
right--
}
}
return res
};
209.长度最小的子数组
给定一个含有
n
个正整数的数组和一个正整数target
。找出该数组中满足其总和大于等于
target
的长度最小的子数组
[numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回0
。
思路:1.两个for循环暴力解法:超时
2.滑动窗口:当窗口内总和小于target,右指针右移;总和大于target,左指针右移;直到右指针移动到数组末尾
实现:
var minSubArrayLen = function (target, nums) {
let left = 0
let right = 0
let minLen = Infinity
let sum = 0
for (right = 0; right < nums.length; right++) {
sum = sum + nums[right]
// 当总和大于target
while (sum >= target) {
minLen = Math.min(minLen, right - left + 1)
sum = sum - nums[left]
left++
}
}
return minLen == Infinity ? 0 : minLen
};