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

ค้นหาคู่ที่มีผลรวมที่กำหนดเพื่อให้องค์ประกอบของคู่อยู่ในแถวที่ต่างกันในPython


สมมติว่าเรามีเมทริกซ์ขององค์ประกอบเฉพาะและผลรวม เราต้องหาคู่ทั้งหมดจากเมทริกซ์ที่มีผลรวมเท่ากับผลรวมที่กำหนด ที่นี่ แต่ละองค์ประกอบของคู่จะถูกนำมาจากแถวที่ต่างกัน

ดังนั้นหากอินพุตเป็น −

2 4 3 5
6 9 8 7
10 11 14 12
13 1 15 16

sum =13 จากนั้นผลลัพธ์จะเป็น [(2, 11), (4, 9), (3, 10), (5, 8), (12, 1)]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • res :=รายการใหม่

  • n :=ขนาดของเมทริกซ์

  • สำหรับผมอยู่ในช่วง 0 ถึง n ทำ

    • จัดเรียงรายการเมทริกซ์[i]

  • สำหรับฉันอยู่ในช่วง 0 ถึง n - 1 ทำ

    • สำหรับ j ในช่วง i + 1 ถึง n ทำ

      • ต่ำ :=0, สูง :=n - 1

      • ในขณะที่ต่ำ =0 ทำ

        • ถ้า (เมทริกซ์[i ต่ำ] + เมทริกซ์[j สูง]) เท่ากับผลรวม ดังนั้น

          • คู่ :=สร้างคู่โดยใช้ (matrix[i, low],matrix[j, high])

          • ใส่คู่ที่ส่วนท้ายของ res

          • ต่ำ :=ต่ำ + 1

          • สูง :=สูง - 1

        • มิฉะนั้น

          • ถ้า (เมทริกซ์[i][ต่ำ] + เมทริกซ์[j][สูง]) <ผลรวม ดังนั้น

            • ต่ำ :=ต่ำ + 1

          • มิฉะนั้น

            • สูง :=สูง - 1

  • ผลตอบแทน

ตัวอย่าง (Python)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

MAX = 100
def sum_pair(matrix, sum):
   res = []
   n = len(matrix)
   for i in range(n):
   matrix[i].sort()
   for i in range(n - 1):
      for j in range(i + 1, n):
         low = 0
         high = n - 1
         while (low < n and high >= 0):
            if ((matrix[i][low] + matrix[j][high]) == sum):
               pair = (matrix[i][low],matrix[j][high])
               res.append(pair)
               low += 1
               high -= 1
         else:
         if ((matrix[i][low] + matrix[j][high]) < sum):
            low += 1
         else:
            high -= 1
   return res

sum = 13
matrix = [
   [2, 4, 3, 5],
   [6, 9, 8, 7],
   [10, 11, 14, 12],
   [13, 1, 15, 16]]
print(sum_pair(matrix, sum))

อินพุต

[[2, 4, 3, 5],
[6, 9, 8, 7],
[10, 11, 14, 12],
[13, 1, 15, 16]]
sum = 13

ผลลัพธ์

[(4, 9), (5, 8), (2, 11), (3, 10), (12, 1)]