演算法練習bat 03小和問題

2021-08-25 17:31:18 字數 978 閱讀 1581

小和問題:

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

例子:[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.常規求解:

兩個for迴圈,每次取出對應的值,遍歷比較,o(n^2)

2.逆向求解,可以求比自己i大的數m,即自己i出現的次數為(i*m),可以使用遞迴分治求解,遞迴的過程中順便排序

第一次:[1],[3],1出現的次數1(比1大的有3,所以有乙個1)

第二次:[1,3],[4],1出現1次,3出現1次

第三次:[2],[5],2出現1次

第四次:[1,3,4],[2,5],1出現2次,3出現1次,4出現1次

總共1+1+3+1+2+1+3+4=16;

**同歸並差不多

public static int smallsum(int arr)

return mergesort(arr, 0, arr.length - 1);

}public static int mergesort(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);

}public static int merge(int arr, int l, int m, int r)

while (p1 <= m)

while (p2 <= r)

for (i = 0; i < help.length; i++)

return res;

}

演算法 歸併排序 小和問題 逆序對問題

在乙個陣列中,每乙個數左邊比當前數小的數累加起來,叫做這個陣列的小和。求乙個陣列的小和稱為小和問題。input 2,4,5,1,7,3 2 左側比 2 小的數,沒有 4 左側比 4 小的數,2 5 左側比 5 小的數,2,4 1 左側比 1 小的數,沒有 7 左側比 7 小的數,2,4,5,1 3 ...

演算法練習題目5(小六零花錢問題)

下面是根據小六每個月的預算,推結果 我 小六每個月零花錢有300元,小六會預算這個月的花銷,如果有多的錢就會湊成整數給媽媽。如果能存到年底的話 就會給她利息。比如總共存1000元 那就能從媽媽那邊拿到1200 如果花銷不夠的話 就直接輸入出現不夠的那個月 輸出 w int totalmoney 0 ...

資料結構和演算法分析之歸併排序 小和問題

示例 歸併排序 public class code 05 mergesort mergesort arr,0,arr.length 1 public static void mergesort int arr,int l,int r int mid l r l 1 mergesort arr,l,m...