小和問題 歸併排序

2021-10-04 09:20:15 字數 1340 閱讀 7853

在乙個陣列中,每乙個數左邊比當前數小的數累加起來,叫做這個陣列的小和。

例子:

輸入:[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

實現的基本原理還是[歸併排序]

將當前序列分為兩個子串行,分別求其小和

對a劃分得到的兩個子串行進行merge操作,得到合併過程產生的小和,再加上a得到的兩個子串行的小和之和

遞迴地執行1和2

private

static

intsmallsum

(int

arr)

return

mergesort

(arr,

0, arr.length -1)

;}private

static

intmergesort

(int

arr,

int l,

int r)

int mid = l +

((r - l)

>>1)

;// 返回值為左右的小和加合併的小和

return

mergesort

(arr, l, mid)

+mergesort

(arr, mid +

1, r)

+merge

(arr, l, mid, r);}

private

static

intmerge

(int

arr,

int l,

int mid,

int r)

while

(p1 <= mid) temp[i++

]= arr[p1++];

while

(p2 <= r) temp[i++

]= arr[p2++];

for(i =

0; i < temp.length; i++

)return res;

}public

static

void

main

(string[

] args)

;int res =

smallsum

(arr)

; system.out.

println

(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,2,51,5 1左邊比1小的數 0 3左邊比3小的數 1 2左邊比2小的數 1 51左邊比51小的數 2,3,1 5左邊比5小的數 2,3,1 所以小和為0 1 1 2 3 1 2 3 1 14 解...