Giả sử chúng ta có một danh sách các số được gọi là num, chúng ta phải kiểm tra xem có tồn tại các số a, b và c sao cho a ^ 2 + b ^ 2 =c ^ 2 hay không.
Vì vậy, nếu đầu vào là [10, 2, 8, 5, 6], thì đầu ra sẽ là Đúng, là 8 ^ 2 + 6 ^ 2 =64 + 36 =100 =10 ^ 2.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- tmp:=danh sách bình phương của tất cả các số theo nums theo thứ tự giảm dần
- đối với mỗi chỉ số i và số n tương ứng trong tmp, thực hiện
- cơ sở:=n
- left:=i + 1, right:=size of tmp -1
- khi left <=right, thực hiện
- t:=nối hai danh sách tmp [trái] và tmp [phải]
- nếu t giống với cơ sở, thì
- trả về True
- ngược lại khi t> cơ sở, thì
- left:=left + 1
- nếu không,
- right:=right - 1
- trả về Sai
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
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
[10, 2, 8, 5, 6]
Đầu ra
True