Cho danh sách số nums, kiểm tra xem có tồn tại ba số a, b, c thỏa mãn a² + b² = c² hay không.
Ví dụ
Đầu vào: [10, 2, 8, 5, 6].
Đầu ra: True vì 8² + 6² = 64+36 = 100 = 10².
Thuật toán
- Tạo danh sách
tmpchứa bình phương các số, sắp xếp giảm dần. - Với mỗi chỉ mục
ivà giá trịntrongtmp:- Gán
base = n. - Sử dụng hai con trỏ
left = i+1,right = len(tmp)-1. - Khi
left <= right:- Tính
t = tmp[left] + tmp[right]. - Nếu
t == base, trả vềTrue. - Nếu
t > base, tăngleft. - Ngược lại, giảm
right.
- Tính
- Gán
- Trả về
Falsenếu không tìm thấy.
Mã nguồn Python
class Solution:
def solve(self, nums):
tmp = sorted([n*n for n in nums], reverse=True)
for i, n in enumerate(tmp):
base = n
left = i+1
right = len(tmp)-1
while left <= right:
t = tmp[left] + tmp[right]
if t == base:
return True
elif t > base:
left += 1
else:
right -= 1
return False
ob = Solution()
print(ob.solve([10, 2, 8, 5, 6]))
Đầu vào / Đầu ra
Input: [10, 2, 8, 5, 6]
Output: True