Mô tả bài toán
Cho danh sách nums và giá trị target. Tìm tổng nhỏ nhất của một cặp số trong danh sách mà lớn hơn target.
Ví dụ: nums = [2, 4, 6, 10, 14], target = 10 → đầu ra 12 (cặp 2 và 10).
Giải thuật (Hai con trỏ sau khi sắp xếp)
- Sắp xếp
nums. - Khởi tạo
answer = 10**10,i = 0,j = n-1. - Khi
i < j:- Nếu
nums[i] + nums[j] > target: cập nhậtanswer, giảmj. - Ngược lại: tăng
i.
- Nếu
- Trả về
answer.
Ví dụ mã Python
class Solution:
def solve(self, nums, target):
nums.sort()
n = len(nums)
answer = 10 ** 10
i, j = 0, n - 1
while i < j:
if nums[i] + nums[j] > target:
answer = min(answer, nums[i] + nums[j])
j -= 1
else:
i += 1
return answer
ob = Solution()
nums = [2, 4, 6, 10, 14]
target = 10
print(ob.solve(nums, target))
Đầu vào
[2, 4, 6, 10, 14], 10
Đầu ra
12