計算陣列的小和

2021-10-24 13:15:27 字數 1052 閱讀 1884

陣列小和的定義如下:

例如,陣列s = [1, 3, 5, 2, 4, 6],在s[0]的左邊小於或等於s[0]的數的和為0;在s[1]的左邊小於或等於s[1]的數的和為1;在s[2]的左邊小於或等於s[2]的數的和為1+3=4;在s[3]的左邊小於或等於s[3]的數的和為1;

在s[4]的左邊小於或等於s[4]的數的和為1+3+2=6;在s[5]的左邊小於或等於s[5]的數的和為1+3+5+2+4=15。所以s的小和為0+1+4+1+6+15=27

給定乙個陣列s,實現函式返回s的小和

[要求]

時間複雜度為o(nlogn),空間複雜度為o(n)

輸入描述:

第一行有乙個整數n。表示陣列長度

接下來一行n個整數表示陣列內的數

輸出描述:
乙個整數表示答案
示例1

6

1 3 5 2 4 6

27
備註:
1⩽n⩽10^5

−100⩽arri⩽100

解:本質上是歸併排序問題,只是在每次排序之前先檢查出左邊比右邊小的資料。

#includeusing namespace std;

long mergesort(int a,int n);

long sortprocess(int a,int l,int r);

long merge(int a,int l,int mid,int r);

int main()

long merge(int *a,int l,int mid,int r)

//左右兩邊的數量不是每次都相等,將剩下的元素也新增到help陣列中

while(p1<=mid)

while(p2<=r)

for(i=0;ia[l+i]=help[i];

return rul;

}

計算陣列的小和

題目 陣列小和的定義如下 例如,陣列s 1,3,5,2,4,6 在s 0 的左邊小於或等於s 0 的數的和為0,在s 1 的左邊小於或等於s 1 的數的和為1,在s 2 的左邊小於或等於s 2 的數的和為1 3 4,在s 3 的左邊小於或等於s 3 的數的和為1,在s 4 的左邊小於或等於s 4 的...

陣列與矩陣 計算陣列的小和

題目 陣列小和的定義如下 例如 陣列s 1,3,5,2,4,6 在s 0 的左邊小於或者等於s 0 的數的和為0,在s 1 的左邊小於或等於s 1 的數的和為1 將所有位置的左邊比它小或者等於的數的和相加起來就是小和。給定乙個陣列,實現函式返回s的小和。基本思路 最簡單易懂的方法,就是依次遍歷陣列每...

計算陣列的子集

計算某個陣列的子集 在遞迴中不用 for迴圈和 visit 陣列,因為每個結果長度不一致,如果每個結果長度一致,比如求全排列,則需要用 for和 visit 但後者也可以用記錄層數的方式 public class main list li new arraylist fin nums,li,new ...