![](/img/trans.png)
[英]How to find the position of the highest and second highest value in an array in java
[英]array find the second highest value
我有一個包含10個整數值的數組。 現在我想找出第二高的數字。我不應該使用任何java API。 一位采訪者向我提出了這個問題。 他想要邏輯。他的要求是,我不應該遍歷整個元素。 有沒有辦法在沒有遍歷的情況下實現結果? Travesing意味着遍歷數組中的所有元素。 我想了很久。最后我放棄了。 如果有人可以解釋,那就太好了。 我還詢問了排序。 他不希望對數組進行排序。
不,這完全不可能。 如果你沒有看所有的數據呢,你不可能知道的第二高值。
當然,您不必對所有數據進行排序 ,這可能是您的面試官的意思 - 但您確實需要至少查看一次所有元素。 每個元素都有可能改變結果,因此需要進行檢查。
如果你不至少看一次每個元素,你就無法知道答案。 但是,如果您不關心,可以使用二進制搜索樹:
在計算機科學中,二進制搜索樹(BST)(有時也可稱為有序或有序二叉樹)是基於節點的二叉樹數據結構,具有以下屬性:[1]
節點的左子樹僅包含鍵小於節點鍵的節點。 節點的右子樹僅包含鍵大於或等於節點鍵的節點。 左右子樹也必須是二叉搜索樹。
資料來源: http : //en.wikipedia.org/wiki/Binary_search_tree
你怎么會找到第二大元素?
從BST的形成方式來看,你知道最大的元素是最右邊的元素(從根節點開始,帶着正確的孩子,直到你無處可去)。
現在,如何確定第二大?
嗯,這可能不是最有效的方法,但讓我們在以下情況下將其分解:
最大的節點是樹根並且沒有子節點 - 沒有第二大元素,因為樹中只有一個節點
最大的節點是樹根(沒有右子) - 第二大元素是左子樹中最大的元素
最大元素不是樹根,而不是葉子(有一個左子) - 第二大元素是他的左子
最大的元素不是樹根,而是葉子(沒有孩子) - 第二大元素是他的父母
我相信你現在可以找出模式和一個簡單的算法:D
我知道這已經得到了解答,但我在想這樣的事情。
double maxVal = array[0];
for (int i=1; i < array.length; i++) {
if (array[i] > maxVal) {
maxVal = array[i];
}
}
從技術上講,我不是遍歷整個數組而是遍歷長度的n-1,因為我將第一個值分配給最大值。 我相信還有其他方法,但這個似乎是面試官可能想要的。
邏輯是如此簡單,我已經在一個for循環中實現了這一點。
我給你我的程序,如果你想要算法,我也可以為你提供。
public static void main(String [] args){
int[] arr={0,12,74,56,2,63,45};
int f1=1,f2=0,temp=0;
int num=0;
for(int i=0;i<arr.length;i++){
num=arr[i];
if(f1<num)
{
temp=f1;
f1=num;
num=temp;
}
if(f2<num)
{
temp=f2;
f2=num;
num=temp;
}
}
System.out.println("First Highest "+f1+" Second Highest "+f2+" Third "+num);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.