計算最大次大值的最優演算法

2021-04-13 21:59:24 字數 704 閱讀 7423

/*

/**求最大,次大值,比較次數為:n + log n -2 ,n-1 為求最大值的代價,log n -1 為求次大值的代價。

*/public class submaxandmaxefficient

void heapfindmax(int e, int n)

//找最大值,放到array[1]

for (last = 2 * n - 2; last >= 2; last -= 2)

max = array[1];

if (array[2] > array[3])

submax = array[3];

else

submax = array[2];

//沿著堆頂往下找次大值

for (int i = 2; i <= 2 * n - 1; i *= 2) else

submax = max(array[i + 1], submax);}}

public static void main(string args)

;for (int i = 0; i < array.length; i++)

result.heapfindmax(array, 17);

system.out.println("max is: " + max);

system.out.println("submax is: " + submax);}}

最大值和次大值問題的最優演算法

輸入 n個數,最壞情況下用 n logn 2 次比較找出當中的最大值和次大值。解題思想 根據題意出現 logn 則肯定用到二分或者堆的思路,但是輸入的數沒有經過排序,而且題目要求的計算量也不允許排序。這樣,就肯定會用到類似堆的思路,但是直接構造堆等同於排序。堆的思想跟競標賽類似,都是父節點 子節點。...

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

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

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

給定乙個含有n個元素的整型陣列,求其最大值和次大值 思想和上一題類似,同樣是用分治法,先求出左邊的最大值leftmax和次大值leftsecond,再求出右邊的最大值rightmax和次大值rightsecond,然後合併,如何合併呢?分情況考慮 1 如果leftmax rightmax,那麼可以肯...