原來的問題是尺寸最小的子陣列的具有比給定值總和
具有比給定整數數組和一個數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元素/中間元素和num_elements = 1/2的總和,基於n爲奇數或偶數.if總和< =給定值,檢查數字其右側或左側更大。將該更大的元素添加到總和並增加num_elements 。重複,直到sum>給定值。
插圖:
1,4,45,6,0,19和閾值= 51
MIN_SIZE =分鐘{MIN_SIZE {1,4,45},{MIN_SIZE} 6,0,19 ,min_containing_45and6}
min_containing_45and6:
總和=中間元件/中間元件的總和= 45 + 6 = 51 < = 51,num_elements = 2。由於4> 0加4求和,sum = 55並增加num_elements。 num_elements = 3。
min_size = min {not possible,not possible,3} = 3。
這算法是否正確?我認爲它的複雜性如果O(logn),是嗎?
編輯:我意識到,我用來找到Size_of_array_containin_mid_elemnts的算法是錯的。任何人都可以提出一個算法來找到這個值?
另請參閱http://stackoverflow.com/questions/13023188/smallest-subset-of-array-whose-sum-is-no-less-than-key – sds
@sds這是關於子集而不是子數組。 – ForguesR