ภาพรวม
โจทย์ตรวจสอบว่ามีคู่ตัวเลขในลิสต์ที่ตัวหนึ่งเป็น 3 เท่าของอีกตัว (x และ 3x) หรือไม่
ตัวอย่าง
อินพุต: [2, 3, 10, 7, 9]
เรียง: [2, 3, 7, 9, 10]
3 × 3 = 9 → พบคู่ (3, 9) → True
อัลกอริทึม Two Pointers
- เรียงลิสต์
- i=0, j=1
- ถ้า 3×nums[i] == nums[j] → พบ
- ถ้า 3×nums[i] > nums[j] → j++ (ต้องการค่ามากขึ้น)
- ถ้า 3×nums[i] < nums[j] → i++ (ลดค่าเป้าหมาย)
โค้ด Python
class Solution:
def solve(self, n):
i = 0
n.sort()
j = 1
while j < len(n):
if 3 * n[i] == n[j]:
return True
if 3 * n[i] > n[j]:
j += 1
else:
i += 1
return False
ob = Solution()
print(ob.solve([2, 3, 10, 7, 9]))
วิธี Set (ง่ายกว่า O(n))
def has_triple_pair(nums):
s = set(nums)
for x in nums:
if 3 * x in s:
return True
return False
ผลลัพธ์
True