我在编码竞赛中遇到了一个问题,基本上归结为这个问题。
给定带有正数的未排序数组,找到最小子数组的长度,该子数组的总和大于或等于输入sum
。
input : [14, 2, 10, 1, 1, 2, 1]
sum = 10
输出= 1 [10]
表示sum = 13
输出= 1 [14]
表示sum = 15
输出= 2 [14, 2]
在1 to 10^5
范围内会有很多问题需要回答。
我的方法。
构建一个与输入长度相同的数组,其中array[i]
将是大小为i
的子数组的最大总和。这可以在O(N * N)
时间和O(N)
空间
所以现在我们有array
增加sum
所以我们可以使用二进制搜索来找到可以满足特定输入和的最小长度。
因此,如果有q
次查询,则会在O(q * log(N))
时间内运行。
我不确定这个解决方案有多可行,或者是否有更好的解决方案。由于我无法在该在线评判中对其进行测试,因此现在无法解决问题。
在时间和空间复杂性方面是否有更好的解决方案。
跟进:
如果以后可以更改给定的输入怎么办?您如何处理可以更新输入的情况。