找出陣列中的最大值和次大值

2021-08-26 21:50:27 字數 588 閱讀 7994

給定乙個含有n個元素的整型陣列,求其最大值和次大值

思想和上一題類似,同樣是用分治法,先求出左邊的最大值leftmax和次大值leftsecond,再求出右邊的最大值rightmax和次大值rightsecond,然後合併,如何合併呢?分情況考慮

1 如果leftmax > rightmax,那麼可以肯定leftmax是最大值,但次大值不一定是rightmax,但肯定不是rightsecond,只需將leftsecond與rightmax做一次比較即可。

2 如果rightmax > leftmax,那麼可以肯定rightmax是最大值,但次大值不一定是leftmax,但肯定不是leftsecond,所以只需將leftmax與rightsecond做一次比較即可。

// 找出陣列的最大值和次大值,a是待查詢的陣列,left和right是查詢區間,max和second存放結果

void maxandsec(int a, int left, int right, int&max, int&second)

else if(left +1== right)

else

else

}}

求出陣列的最大值和次大值

求陣列的最大值相對來說是比較簡單,只需要遍歷一遍陣列,不斷更新陣列的最大值,直到遍歷完成。自然語言描述 1.初始化最大值的角標 2.遍歷陣列,比較當前的最大值角標的元素和遍歷得到陣列元素的大小 如果陣列元素大於當前最大值,更新最大值角標為遍歷到的陣列元素角標,直到遍歷完成程式語言描述 int get...

求陣列的最大值和次大值 (迭代 遞迴)

參考 資料結構 鄧俊輝 求陣列a 在區間 lo,hi 內的最大值和第二大值。返回最大值的下標x1和第二大值的下標x2 迭代1 void max2 int a,int lo,int hi,int x1,int x2 迭代2 相對於迭代1不會改進最壞情況下的時間複雜度 void swap int x,i...

獲取陣列中的最大值和次大值以及最小值和次小值

昨天參加leetcode的周賽的時候,寫 的過程中遇到了需要獲取遍歷過程 現的最小值和次小值的場景。由於之前沒有認真思考過這個邏輯,導致當時浪費了不少時間。現在把這個邏輯好好梳理一下。下面以最小值和次小值為例。首先需要宣告兩個變數 first min,second min float inf flo...