2009-08-29 149 views
2

我有兩個數組,一個非常大(超過一百萬個條目),另一個數組很小(少於1000個條目),在數組中的所有條目中找到最大數目的最佳方法是什麼?在數組中查找最大整數?

謝謝。

+0

遍歷每個數組,跟蹤到目前爲止的最大值。這個問題有一個竅門嗎?你必須至少看看每個值才能找到最大值。 – hughdbrown 2009-08-29 03:24:49

+1

我必須說,用戶名「rachel」最近出現了多少種變體,這是顯着的。 :)更嚴重的說明,這裏是一個非常相關的問題:http://stackoverflow.com/questions/1042507/finding-smallest-value-in-an-array-most-efficiently – agorenst 2009-08-29 03:25:37

+0

@Agor - 三個用戶命名爲'雷切爾'今天已經簽名...奇怪。 – 2009-08-29 03:38:47

回答

14

如果數組未經排序,則必須執行線性搜索以查找每個數組中的最大值。如果數組排序,那麼只需從每個數組中取第一個或最後一個元素(取決於排序順序)。

4

如果你的數組已經排序,你可以跳到最大的最後。

如果你的數組沒有排序,你將不得不遍歷整個列表,追蹤到目前爲止看到的最大值。

5

如果你仔細想想,如果你想找到最高值,你必須檢查所有的值。這是沒有辦法的(除非數組被排序,這很容易 - 只要每個數組的最後(或者如果按降序排序)取最大值)。例如:

int highest = array1[i]; // note: don't do this if the array could be empty 
for(int i = 0; i < array1.length; i++) { 
    if(highest<array1[i]) highest = array1[i]; 
} 
for(int i = 0; i < array2.length; i++) { 
    if(highest<array2[i]) highest = array2[i]; 
} 
// highest is now the highest 
0

我們可以減少您的操作次數或比較3(n/2-2)。來自2n(n用於使用線性搜索查找最大數量,n用於最小值)。假設我們有一組元素[1,9,8,7,4,5,1,4,7,8,1,6]。 將第一個元素設置爲Max = 1,將下一個設置爲Min = 9,現在將同時接下來的兩個元素進行比較,然後與Max和Min進行比較。所以一次迭代只需要3次比較,但數組減少到n/2。因此比較的總數將是3(n/2-2)。 實施例:

Max=arr[1]; 

Min=arr[2]; 

for(int i=3; i< arr.length;i=i+2) 

{ 

if(arr[i]>arr[i+1]) 

{ 

if(Max < arr[i]) 

Max=arr[i]; 

if(Min > arr[i+1]) 

Min=arr[i+1]; 

} 

else 

{ 

if(Max < arr[i+1]) 

Max=arr[i+1]; 

if(Min > arr[i]) 

Min=arr[i]; 

} 

} 
+2

實際上,對於10個元素n-1(10-1 = 9)的未排序數組,需要進行比較。在你的情況3(n/2-2),即3(10/2-2)= 9的比較中,兩者都是相等的,對於20個元素數組,你的方法需要24次比較,它有多優越? – Ironluca 2014-12-12 10:33:53

1

這裏我給用於從int數組求最大值的簡單代碼。 我的邏輯是: - 數組是int [] arr = {8,5,6,7,3,4,9}。首先取一個臨時變量,並將第一個值寫入該變量,並假定這是最大值,即tempValue = arr [0]。並在for循環中取一個if塊並檢查第二個值是否大於第一個值。同樣,如果塊將自動檢查其餘值。最後,最大值將分配給臨時變量,並得到結果在給定數組中最大值爲9。

公共類MaxIntArray {

public static void main(String[] args){ 


    int[] arr={8,5,6,7,3,4,9}; 

    int tempValue=arr[0]; 

    for(int i=0;i<arr.length;i++){ 
     if(arr[i]>tempValue){ 
      tempValue=arr[i]; 
     } 

    } 
    System.out.println("\n Maximum Value in the Given Array = "+tempValue); 

} 

}

輸出是: - 在給定的數組最大值= 9

+0

該問題關注「(超過百萬條目)」的案例,它如何考慮到這一方面? – emecas 2014-12-25 17:13:51

+0

@emecas,arr.length將檢查數組中的所有條目。我已經給出了未分類數組的邏輯。即需要像線性搜索一樣逐個檢查每個元素。 – 2014-12-26 16:02:15

-1

在這裏,我給簡單的代碼,用於從求最大值int數組。我的邏輯是: - 數組是int [] arr = {8,5,6,7,3,4,9}。首先獲取一個臨時變量,並將第一個值放入該變量中,並假定這是最大值,即tempValue = arr [0]。並在for循環中取一個if塊並檢查第二個值是否大於第一個值。同樣,如果塊將自動檢查其餘值。最後,最大值將分配給臨時變量,並得到結果在給定數組中最大值爲9。

公共類MaxIntArray {

public static void main(String[] args){ 


    int[] arr={8,5,6,7,3,4,9}; 

    int tempValue=arr[0]; 

    for(int i=0;i<arr.length;i++){ 
     if(arr[i]>tempValue){ 
     tempValue=arr[i]; 
     } 

    } 
    System.out.println("\n Maximum Value in the Given Array = "+tempValue); 

} 

}

//輸出是: - 在給定的數組= 9

0

對於無序陣列的最大值,則可以與初始化的最大數量可變值0(給定數組由正值構成),然後迭代數組中的所有項目,將每次迭代中的較大數字分配給最大變量。

int[] values = {8,3,7,10,5}; 
    max = 0; 
    for(int i = 0;i < values.length;i++){ 
    if(values[i] > max){ 
     max = values[i]; 
     } 
    } 
    System.out.println(max);