求陣列的小和

2021-08-17 04:35:01 字數 867 閱讀 6061

陣列小和的定義:例如,陣列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]—1,s[4]—1+3+2=6,s[5]—15,所以s的小和為0+1+4+1+6+15=27,給定乙個陣列,實現函式返回小和。

改寫mergesort可以實現o(nlogn)的時間複雜度

注:思路來自於左程雲老師的《程式設計師**面試指南》

#include

using namespace std;

class solution

return func(arr, 0, length - 1);

}int func(int s, int l, int r)

int mid = (l + r) / 2;

return func(s, l, mid) + func(s, mid + 1, r) + merge(s, l, mid, r);

}int merge(int s, int left, int mid, int right)

else

}for (; (j < right + 1) || (i < mid + 1); j++, i++)

for (int k = 0; k<(right-left+1); k++)

return smallsum;

}void swap(int arr, int index1, int index2)

};int main() ;

solution so;

cout<<(so.getsmallsum(arr,6));

return 0;

}

求陣列的小和

陣列小和定義如下 有一陣列s 1,3,5,2,4,6 在s 0 的左邊小於或等於s 0 的數的和為0,在s 1 的左邊小於或等於s 1 的數的和為1,以此類推,把每個元素的左邊小於或等於當前元素的和加起來,就是該陣列的小和,s的小和為0 1 4 1 6 15 37 如下 public class p...

求陣列中第二小的數

一 大致思路 初始化2個最小值,firstmin,secondmin 2.遍歷所有元素,假如當前元素小於firstmin,那麼將更新firstmin,secondmin.如果小於secondmin直接更新secondmin 二 具體實現 public class findsecondmin for ...

007求陣列中子陣列最大的和

題目描述 輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o n 例如輸入的陣列為1,2,3,10,4,7,2,5,和最大的子陣列為3,10,4,7,2,因此輸出為該子陣列的和18。思路一,暴力法。通過...