在乙個陣列中,每乙個數左邊比當前數小的數累加起來,叫做這個陣列的小和。求乙個陣列 的小和。
例子:[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
解題思路: 求乙個數左邊比它小的數的和,等於求這個陣列中,當前數 * 當前數右邊比它大的數的個數.
利用歸併排序解題,**如下:
public class smallsum
return smallsum(arr,0,arr.length -1);
}public static int smallsum(int arr, int l,int r)
int mid = l + ((r - l) >> 1);
return smallsum(arr,l,mid) + smallsum(arr,mid + 1 , r) + merge(arr,l,mid,r);
}public static int merge(int arr, int l, int m, int r)
while(p1 <= m)
while(p2 <= r)
for (i = 0; i < temp.length ; i ++)
return res;
}}
歸併排序 小和問題
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 ...
小和問題 歸併排序
在乙個陣列中,每乙個數左邊比當前數小的數累加起來,叫做這個陣列的小和。例子 輸入 1,3,4,2,5 輸出 16 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實現的基本原...