สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums และอีกค่าหนึ่งคือ k เราต้องตรวจสอบว่าเราสามารถหาองค์ประกอบที่ไม่ซ้ำกันสามรายการในรายการที่มีผลรวมเป็น k หรือไม่
ดังนั้น หากอินพุตเป็น nums =[11, 4, 6, 10, 5, 1] k =20 ผลลัพธ์จะเป็น True เนื่องจากเรามีตัวเลข [4,6,10] ซึ่งมีผลรวมเป็น 20
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
เรียงเลขรายการ
-
l :=0, r :=ขนาดของ nums − 1
-
ในขณะที่ l
-
t :=k − nums[l] − nums[r]
-
ถ้า nums[r − 1]
-
l :=l + 1
-
ออกจากวง
-
-
สำหรับ m ในช่วง l + 1 ถึง r ทำ
-
ถ้า nums[m]> t แล้ว
-
r :=r − 1
-
ออกจากวง
-
-
ถ้า nums[m] เหมือนกับ t แล้ว
-
คืนค่า True
-
-
-
-
คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, nums, k): nums.sort() l, r = 0, len(nums) − 1 while l < r − 1: t = k − nums[l] − nums[r] if nums[r − 1] < t: l += 1 continue for m in range(l + 1, r): if nums[m] > t: r −= 1 break if nums[m] == t: return True return False ob1 = Solution() nums = [11, 4, 6, 10, 5, 1] k = 20 print(ob1.solve(nums, k))
อินพุต
[11, 4, 6, 10, 5, 1], 20
ผลลัพธ์
True