Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

หาตัวเลขน้อยที่สุดที่มากกว่า K ในลิสต์ Python

หาค่าน้อยที่สุดในลิสต์ที่มากกว่า 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 หลายครั้งคุ้มค่า