【发布时间】:2021-06-20 16:10:43
【问题描述】:
我在一次采访中遇到了这个问题。它为您提供了一个数组和一个阈值,该函数应返回该数组的最短、非空、连续子数组的长度,其总和至少超过该阈值。
所以如果数组是[2,-1,2] 并且阈值是3 那么它应该返回3。
这是我用 JavaScript 编写的尝试。我采用了典型的滑动窗口方法,一旦总和大于threshold,我将减小窗口大小并在每次迭代期间跟踪窗口大小。
function(array, threshold) {
let minWindowSize = Infinity
let sum = 0
for (let start = 0, end = 0; end < array.length; end++) {
sum += array[end]
if(sum >= threshold) minWindowSize = Math.min(minWindowSize, end - start + 1)
while (sum > threshold) {
sum -= array[start++]
}
}
return minWindowSize === Infinity ? -1 : minWindowSize
};
但是对于像这样的情况,我的解决方案是错误的
array = [17,85,93,-45,-21]
threshold = 150
我想知道这个问题与典型的滑动窗口问题有什么区别,有没有办法实现滑动窗口方法来解决这个问题?看起来很简单,但结果却是be a hard question on leetcode。
【问题讨论】:
标签: javascript algorithm sliding-window