問題描述:有一組數,每個數的左邊如果有比自己小的數,則這個數要加入到左子和中。
比如5左邊3+2,4左邊3+2,6左邊3+2+5+4,9左邊3+2+5+4+6,左子和總大小為44
(同理問題:每個數右邊比自己小的數可以組成降序組,問有多少個降序組)
用堆排序的思想來做
**只需要修改合併**中的while()中的一部分即可
int mergearray(int a,int left,int mid,int right)
while(p1<=mid)
while(p2<=right)
for(i=0;ireturn sum;
}int mergesortsum(int a,int left,int right)
歸併排序應用之小和問題
小和問題 q1 什麼是小和?a 在乙個數列中,任意元素p左邊所有比p小的數之和,即為小和。q2 什麼是小和問題?a 數列中所有元素的小和之和就是小和問題 利用歸併排序求解 思想 從第乙個元素p起向後看,如果有n個元素都比p大,說明n個元素的小和中都有p,因此,第乙個元素對小和的貢獻是n p,遍歷完整...
歸併排序 小和問題
public class mergesort sortprocess arr,0,arr.length 1 遞迴 public static void sortprocess int arr,int l,int r int mid l r l 1 sortprocess arr,l,mid t n ...
歸併排序 小和問題
問題描述 在乙個陣列中,每乙個數左邊比當前數小的數累加起來,叫做這個陣列的小和。求乙個陣列的小和。樣例 1,3,4,2,5 1左邊比1小的數,沒有 3左邊比3小的數,1 4左邊比4小的數,1 3 2左邊比2小的數,1 5左邊比5小的數,1 3 4 2 所以小和為1 1 3 1 1 3 4 2 16 ...