我試圖找到陣列中的第二大數字。有人可以告訴我我缺少什么條件嗎?
我確信互聯網上有很多可用的解決方案,但我想知道我的代碼中可能缺少什么條件?(無排序)
class Solution {
int print2largest(int numbers[], int n) {
if(n <= 1)
return -1;
int firstLargeNo = -1, secondLargeNo = -1;
if(numbers[0] > numbers[1]) {
firstLargeNo = numbers[0];
secondLargeNo = numbers[1];
}
else {
firstLargeNo = numbers[1];
secondLargeNo = numbers[0];
}
for(int i = 2; i < numbers.length; i ) {
if(numbers[i] > firstLargeNo) {
secondLargeNo = firstLargeNo;
firstLargeNo = numbers[i];
}
else if(firstLargeNo == secondLargeNo || numbers[i] > secondLargeNo)
secondLargeNo = numbers[i];
}
if(firstLargeNo == secondLargeNo)
return -1;
return secondLargeNo;
}
}
失敗的測驗用例檔案(Google Drive):測驗用例
正確的輸出:999
uj5u.com熱心網友回復:
看起來您正在尋找陣列中第二大的唯一數字。
您可以獲得的第一種情況是在初始化時,如果沒有機會重新分配firstLargeNo == secondLargeNo,這可能會導致不正確的結果(如果兩個最大值位于陣列的最開頭,則會出現這種情況,例如)。secondLargeNo {8, 8, 3, 1, 5}
如果陣列的兩個第一個元素相等,numbers[0] > numbers[1]則將評估條件false并執行后面的代碼塊else:
else {
firstLargeNo = numbers[1];
secondLargeNo = numbers[0]; // when numbers[1] == numbers[0], secondLargeNo become equal to firstLargeNo instead of being assign to -1
}
我們可以像這樣改變這些變數的初始化:
int firstLargeNo = Math.max(numbers[0], numbers[1]);
int secondLargeNo =
numbers[0] == numbers[1] ? -1 : Math.min(numbers[0], numbers[1]);
另一個錯誤源于else if回圈內部的條件。簽 firstLargeNo == secondLargeNo入不正確,相反我們需要檢查下一個元素numbers[i]是否等于firstLargeNo(如果是,我們應該跳過這個元素)。
其余的代碼可以這樣寫:
for(int i = 2; i < numbers.length; i ) {
if(numbers[i] > firstLargeNo) {
secondLargeNo = firstLargeNo;
firstLargeNo = numbers[i];
}
else if (numbers[i] != firstLargeNo && numbers[i] > secondLargeNo) {
secondLargeNo = numbers[i];
}
}
return secondLargeNo;
在線演示的鏈接
uj5u.com熱心網友回復:
你為什么開始 i=2?因為陣列沒有排序。初始值 firstLargeNo=number[0] 和 secondLargeNo=number[0];所以得到 i=1;
uj5u.com熱心網友回復:
我提出這個解決方案:
class Solution {
int print2largest(int numbers[], int n) {
if(n <= 1)
return -1;
int secondLargeNo = -1, largest = numbers[0];
for(int num : numbers) {
if(num > largest) {
secondLargeNo = largest;
largest = num;
}
}
return secondLargeNo;
}
}
如果存在則回傳陣列中第二大的數,否則回傳-1。
uj5u.com熱心網友回復:
public static int secondLargest(int [] src) {
Integer highest = Integer.MIN_VALUE;
Integer second = Integer.MIN_VALUE;
for (int i : src) {
if (i > highest) {
second = highest;
highest = i;
continue;
}
if (i > second) {
second = i;
}
}
return second;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/488609.html
下一篇:比較bash中的兩個字串變數
