สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums เราต้องตรวจสอบว่ามีตัวเลขสามตัว a, b และ c อยู่หรือไม่ ดังนั้น a^2 + b^2 =c^2
ดังนั้น หากอินพุตเป็น [10, 2, 8, 5, 6] ผลลัพธ์จะเป็น True เช่น 8^2 + 6^2 =64+36 =100 =10^2
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- tmp :=รายการกำลังสองของตัวเลขทั้งหมดเป็น nums เรียงลำดับจากมากไปน้อย
- สำหรับแต่ละดัชนี i และหมายเลขที่เกี่ยวข้อง n ใน tmp ให้ทำ
- ฐาน :=n
- ซ้าย :=i+1, ขวา :=ขนาดของ tmp -1
- ขณะซ้าย <=ขวา ทำ
- t :=เข้าร่วมสองรายการ tmp[left] และ tmp[right]
- ถ้า t เท่ากับฐาน แล้ว
- คืนค่า True
- มิฉะนั้น เมื่อ t> เบส แล้ว
- ซ้าย :=ซ้าย + 1
- มิฉะนั้น
- ขวา :=ขวา - 1
- คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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]))
อินพุต
[10, 2, 8, 5, 6]
ผลลัพธ์
True