/*
/**求最大,次大值,比較次數為: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,那麼可以肯...