最大的兩個數
先與小者進行比較,如果比最小的大, 再與大者進行比較有兩種情況。
其實,maxFirst, maxSecond的形式也類似小頂堆的思路。
時間複雜度:O(n)
空間複雜度:2
func FindMaxs() {
arr := []int{1, 2, 3, 4, 5, 6, 6}
maxFirst, maxSecond := 0, 0
for _, v := range arr {
if v > maxSecond { // 先與小者進行比較,如果比最小的大, 再與大者進行比較有兩種情況
if v <= maxFirst {
maxSecond = v
} else {
maxSecond = maxFirst
maxFirst = v
}
}
}
print(maxFirst, maxSecond) // 輸出:6 6
}
最大的k個數
建一個k個元素的小頂堆,遍歷數組的每個值如果大於堆頂則取代堆頂,對新堆頂進行向下調整。
時間複雜度:O(nlogk)
空間複雜度:k