獲取陣列中的最大值和次大值以及最小值和次小值

2021-10-07 04:44:17 字數 1485 閱讀 4469

昨天參加leetcode的周賽的時候,寫**的過程中遇到了需要獲取遍歷過程**現的最小值和次小值的場景。

由於之前沒有認真思考過這個邏輯,導致當時浪費了不少時間。

現在把這個邏輯好好梳理一下。

下面以最小值和次小值為例。

首先需要宣告兩個變數

first_min, second_min = float('inf'), float('inf')

如果當前元素n小於first_min, 說明n是目前已知的最小值,但是不能直接更新最小值,因為還需要維持次小值,因此,需要先把當前最小值賦值給次小值,然後再把當前元素賦值給最小值。

如果當前元素n不小於first_min,但是小於second_min,那麼就只需要更新次小值。

"""

在遍歷陣列的過程中

儲存最大值, 次大值, 最小值, 次小值

"""from typing import list

deffind_min_and_second_min

(nums: list[

int]):

first_max, second_max =

float

('-inf'),

float

('-inf'

) first_min, second_min =

float

('inf'),

float

('inf'

)for n in nums:

# 如果當前元素大於現有最大值

# 先更新次大值

# 然後更新最大值

if first_max < n:

second_max = first_max

first_max = n

# 如果當前元素不大於現有最大值, 但是大於現有次大值

# 則只更新次大值

elif second_max < n:

second_max = n

# 如果當前元素小於現有最小值

# 先更新次小值

# 然後更新最小值

if first_min > n:

second_min = first_min

first_min = n

# 如果當前元素不小於現有最小值, 但是小於現有次小值

# 則只更新次小值

elif second_min > n:

second_min = n

print

(first_max, second_max, first_min, second_min)

if __name__ ==

'__main__'

: s =[63

,2,6

,11,1

,0,2

,0]

find_min_and_second_min(s)

找出陣列中的最大值和次大值

給定乙個含有n個元素的整型陣列,求其最大值和次大值 思想和上一題類似,同樣是用分治法,先求出左邊的最大值leftmax和次大值leftsecond,再求出右邊的最大值rightmax和次大值rightsecond,然後合併,如何合併呢?分情況考慮 1 如果leftmax rightmax,那麼可以肯...

求出陣列的最大值和次大值

求陣列的最大值相對來說是比較簡單,只需要遍歷一遍陣列,不斷更新陣列的最大值,直到遍歷完成。自然語言描述 1.初始化最大值的角標 2.遍歷陣列,比較當前的最大值角標的元素和遍歷得到陣列元素的大小 如果陣列元素大於當前最大值,更新最大值角標為遍歷到的陣列元素角標,直到遍歷完成程式語言描述 int get...

輸出陣列中的最大值與次大值,以及它們的下標

include int main void if a 0 a 1 else 設定兩個變數用來儲存最大值與次大值下標 for i 2 i 10 i else if a i a index sec 若a i 沒有最大值大,但是比次大值大,則a i 是當前次大值,index sec存當前下標 index ...