// 209(连续子数组)
// time: O(n)
function minSubArrayLen(s, nums) {
let l = 0, r = -1; // nums [l..r] 滑动窗口
let sum = 0
let res = nums.length + 1
while (l < nums.length) {
if (r + 1 < nums.length && sum < s) {
sum += nums[++r]
} else {
sum -= nums[l++]
}
if (sum >= s) {
res = Math.min(res, r - l + 1)
}
}
if (res === nums.length + 1) {
return 0
}
return res
}
const r = minSubArrayLen(8, [1, 2, 3, 4, 8, 5])
// console.log(r)
function maxSubArrayLen(nums) {
let l = 0, r = 0
let maxLength = 0
let max = 0
while (r < nums.length) {
// console.log(r)
if (nums[r] >= max) {
max = nums[r]
if (r === nums.length - 1) {
maxLength = Math.max(maxLength, r - l + 1)
return maxLength
}
} else {
maxLength = Math.max(maxLength, r - l)
l = r
max = nums[l]
}
r++
}
return maxLength
}
const m = maxSubArrayLen([2, 3, 4, 1, 2, 3, 4, 5, 2, 3, 3, 4, 4, 5])
console.log(m)
连续子数组-209
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 思想:left,right指定一个数组长度 值大于s,sum=sum-left,left++,缩小窗口,直到小于s...
- 零子数组:对于长度为N的数组,求连续子数组和和最接近0的值和子数组最大连续子数组:给定一个数组A,求A的连续子数组...
- 给出一个由[-100,100]之间整数组成的数组,求其相加和最大的连续子数组解题:时间复杂度为O(N),也能解决最...
- 最近碰到一个很有意思的计算题: 求一个整数数组中和最大的连续子数组,例如:[1, 2, -4, 4, 10, -3...
- 题目 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如...