Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมตรวจสอบว่ารายการที่กำหนดมีทริปเลทพีทาโกรัสหรือไม่ใน Python

สมมติว่ามีรายการตัวเลขชื่อ 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 ทำ
    • base := n
    • left := i+1, right := ขนาดของ tmp -1
    • while left <= right ทำ
      • t := tmp[left] + tmp[right]
      • ถ้า t เท่ากับ base คืนค่า True
      • ถ้า t > base แล้ว left := left + 1
      • มิฉะนั้น right := right - 1
  • คืนค่า False

ตัวอย่างโค้ด

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