2015-01-21 73 views
1

這裏我寫了代碼來打印陣列中的最大和第二大的數字。但是當我在數組中有兩次最大的數字時,它的打印量最大和次數最多。可以有人告訴我我犯的錯誤。這是我的代碼。從java中的整數數組中獲得最大和第二大的數字?

int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6}; 
    int largest = arr[0]; 
    int secondLargest = arr[0]; 
    // check the condition 
    for (int i = 0; i < arr.length; i++) { 
     // this condition check for largest number 
     if (arr[i] > largest) { 
      secondLargest = largest; 
      largest = arr[i]; 

     } else if (arr[i] > secondLargest) { 
      secondLargest = arr[i]; 

     } 
    } 
    // print the result 
    System.out.println("second largest number is:" + secondLargest); 
    System.out.println("largest number is:" + largest); 

和輸出來爲:

second largest number is:96 
largest number is:96 
+1

你爲什麼不對它進行排序,並首先返回的解決方案和第二個值? – Maroun 2015-01-21 12:21:06

+0

那麼在迭代數組值之前,你最初的假設是maximum = secondLargest = arr [0]已經是假的了。 – user2336315 2015-01-21 12:21:42

+1

@MarounMaroun爲什麼要爲這樣的任務排序數組? 'O(n)'vs'O(nlogn)'(我認爲這也是一個練習) – user2336315 2015-01-21 12:23:11

回答

1

有2個問題:

1)的第一大和第二大(使用Integer.MIN_VALUE的)的初始化;您在第一次迭代中設置第二大,並且它是數組中最大的數字

2)設置secondLargest的條件;您也應該檢查:ARR [I] <最大

int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6}; 
    int largest = Integer.MIN_VALUE; 
    int secondLargest = Integer.MIN_VALUE; 
    // check the condition 
    for (int i = 0; i < arr.length; i++) { 
     // this condition check for largest number 
     if (arr[i] > largest) { 
      secondLargest = largest; 
      largest = arr[i]; 
     } else if (arr[i] > secondLargest && arr[i] < largest) { 
      secondLargest = arr[i]; 
     } 
    } 

輸出:

second largest number is:92 
largest number is:96 
+0

user1121883,如何從上面的代碼打印小數字? – khanam 2015-01-21 12:38:27

+0

@ khanam最小和次小? – user1121883 2015-01-21 12:39:18

+0

user1121883,是 – khanam 2015-01-21 13:10:30

0

要初始化largestsecondLargest到數組的第一個元素,因此,如果第一個元素已經是最大的,都將持有最大結束。

更好的初始化是將它們設置爲一個真正的小值:

int largest = Integer.MIN_VALUE; 
int secondLargest = Integer.MIN_VALUE; 
+0

伊蘭,我不想使用任何內置API所以。 – khanam 2015-01-21 12:29:25

+0

@khanam你認爲'Integer.MIN_VALUE'是一個內置的API嗎?你可以用'0x80000000'替換它。 – Eran 2015-01-21 12:31:09

0
int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6}; 

有兩個數字與值96.因此,經過96> 96失敗,它關係到ARR的條件secondLargest並通過該測試。這就是爲什麼你會擁有最大和secondLargest爲相同數量,96

0

下面是使用的binarySearch

int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6}; 
Arrays.sort(arr); 
int largest = arr[arr.length - 1]; 
int binarySearch = Arrays.binarySearch(arr, largest); 
System.out.println("largest  = " + largest); 
// need to handle the case for arrays which are... 
// - empty 
// - contain only one int 
// - the largest int is on index zero 
System.out.println("second largest = " + arr[binarySearch - 1]); 
相關問題