【发布时间】:2014-08-07 20:55:32
【问题描述】:
原来的问题是
总和大于给定值的最小子数组 给定一个整数数组和一个数字 x,找到总和大于给定值的最小子数组。在http://www.geeksforgeeks.org/minimum-length-subarray-sum-greater-given-value/
但是如果问题只是求最小子数组的大小,我们可以使用分治法吗?
算法: Size_of_min_subarray(1,n) =
{ Size_of_min_subarray(1,n/2), Size_of_min_subarray(n/2,n),Size_of_array_containing mid_element(s) 的最小值}
Size_of_array_containing_mid_element 计算公式:
取中间元素,初始化 sum=mid element/sum of mid element 和 num_elements=1/2 基于 n 是奇数还是偶数。如果 sum给定值。
插图:
1,4,45,6,0,19 和阈值=51
min_size=min{ min_size{1,4,45} , min_size{6,0,19} , min_ contains_45and6 }
min_ contains_45and6:
总和=中间元素/中间元素的总和=45+6=510 将 4 添加到 sum ,sum=55 并增加 num_elements。 num_elements=3。
min_size=min{ 不可能,不可能,3} =3。
这个算法正确吗?我认为它的复杂度是 O(logn),对吗?
编辑:我意识到我用来查找 Size_of_array_containin_mid_elemnts 的算法是错误的。有人可以建议一个算法来查找这个值吗?
【问题讨论】:
-
@sds 这是关于子集而不是子数组。