หาค่าน้อยที่สุดในลิสต์ที่มากกว่า K
กำหนดลิสต์ตัวเลขและค่า K หาค่าในลิสต์ที่ > K และน้อยที่สุด (Next Greater Element)
วิธีที่ 1: ใช้ min() กับ Generator
lst = [1,5,6,7,11,14]
k = 8
res = min(x for x in lst if x > k)
print(res) # 11
วิธีที่ 2: ใช้ filter() และ lambda
res = min(filter(lambda x: x > k, lst))
print(res) # 11
วิธีที่ 3: ใช้ bisect_right (ต้องเรียงลำดับก่อน)
from bisect import bisect_right
lst = [1,5,6,7,11,14]
k = 8
lst.sort()
idx = bisect_right(lst, k)
if idx < len(lst):
print(lst[idx]) # 11
เปรียบเทียบ
- min+generator: เรียบง่าย O(N)
- filter+lambda: คล้ายกัน O(N)
- bisect: ต้องเรียงก่อน O(N log N) แต่ถ้าต้อง Query หลายครั้งคุ้มค่า