หาค่าที่ใหญ่เป็นอันดับ 3 (Third Maximum) ในลิสต์จำนวนเต็ม โดยไม่เรียงลิสต์ทั้งหมด ใช้ตัวแปรเก็บค่าสูงสุด 3 อันดับ แบบ O(n)
ตัวอย่างโค้ด
def third_max_num(my_num):
my_result = [float('-inf'), float('-inf'), float('-inf')]
for num in my_num:
if num not in my_result:
if num > my_result[0]:
my_result = [num, my_result[0], my_result[1]]
elif num > my_result[1]:
my_result = [my_result[0], num, my_result[1]]
elif num > my_result[2]:
my_result = [my_result[0], my_result[1], num]
if float('-inf') in my_result:
print(max(my_num))
else:
print(my_result[2])
my_list = [45, 31, 78, 9, 0, 54, 12, 18]
print("The list is :")
print(my_list)
print("The third maximum number is :")
third_max_num(my_list)
ผลลัพธ์
The list is : [45, 31, 78, 9, 0, 54, 12, 18]
The third maximum number is : 45
คำอธิบาย
- เริ่มต้นลิสต์
my_result3 ค่าเป็น-inf - วนลูปทุกตัวในลิสต์ ข้ามค่าที่มีอยู่ใน my_result แล้ว (Distinct)
- อัปเดตลิสต์ 3 อันดับตามลำดับ: มากที่สุด, อันดับ 2, อันดับ 3
- ถ้ายังมี
-infอยู่ แสดงว่าข้อมูลไม่ถึง 3 ค่าที่ต่างกัน → พิมพ์ค่าสูงสุดแทน