public class 找出乙個陣列中第二大的數 else if (arr[i] > max2 && arr[i] < max1)
}return max2;
}
public static void main(string args) ;
int a = find(arr);
system.out.println(a);
}
}
首先設定兩個索引max1,max2,分別用來存最大的和次最大的索引。然後遍歷一次,當a[i] > a[max1]時是一種情況,要進行交換;另外當a[i] < a[max1] 同時a[i] > a[max2]時,這種情況也要進行處理。注意,max1、max2的索引初值均為0, 有的人把max2設成-1,這是不夠嚴密的。另外,就是遍歷的時候,從第二個數開始遍歷即可,即i = 1開始往後遍歷。
這個演算法的複雜度是o(n),問題似乎很好解決了,但試問有比這更快的方法嗎?而且,如果不是讓找第二大的數,而是找第三大、第四大、第五大,或者第三小、第4小的數,上面這種思路顯然是走不通的。腫麼辦? 下篇接著說。
找出陣列中第二大的數
給你乙個陣列,求出其中第二大的數 比如陣列a 1,2,3,4,5,6,7,8,9 其中第二大的數為8,返回8即可 分析 一般情況下都是求最大值,呵呵,這道題很有趣。想想也不難,可以在掃瞄最大值的同時,求出第二大的值,就是比當前最大值大的數賦給最大值,然後用第二大的值與先前的最大值比較,如果小,則用先...
找出陣列中第二大的數
include include includeusing namespace std 初始化最大值為a 0 次大值為a 1 遍歷一次,每次比較並更新最大值和次大值,最後就可以得到次大值。這種方法時間複雜度為o n bool invalidinput false int findsecondmax i...
找出陣列中第二大的數
題目 寫乙個函式找出乙個整數陣列中,第二大的數。cpp view plain copy print?include 初始化最大值為a 0 次大值為a 1 遍歷一次,每次比較並更新最大值和次大值,最後就可以得到次大值。intfindsecondmaxvalue int a,intsize else i...