尋找數組中最大的兩個數和k個數

最大的兩個數

先與小者進行比較,如果比最小的大, 再與大者進行比較有兩種情況。

其實,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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章