Computer >> Máy Tính >  >> Lập trình >> Python

Tìm các cặp có tổng cho trước sao cho các phần tử của cặp nằm trong các hàng khác nhau trong Python


Giả sử chúng ta có một ma trận gồm các phần tử duy nhất và một tổng; chúng ta phải tìm tất cả các cặp từ ma trận có tổng bằng tổng đã cho. Ở đây, mỗi phần tử của cặp sẽ được lấy từ các hàng khác nhau.

Vì vậy, nếu đầu vào giống như -

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

sum =13, thì đầu ra sẽ là [(2, 11), (4, 9), (3, 10), (5, 8), (12, 1)]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • res:=một danh sách mới

  • n:=kích thước của ma trận

  • đối với tôi trong phạm vi từ 0 đến n, hãy thực hiện

    • sắp xếp ma trận danh sách [i]

  • đối với tôi trong phạm vi từ 0 đến n - 1, hãy thực hiện

    • đối với j trong phạm vi i + 1 đến n, thực hiện

      • thấp:=0, cao:=n - 1

      • trong khi thấp =0, thực hiện

        • nếu (ma trận [i, thấp] + ma trận [j, cao]) giống với tổng, thì

          • cặp:=tạo cặp bằng cách sử dụng (ma trận [i, thấp], ma trận [j, cao])

          • chèn cặp vào cuối res

          • thấp:=thấp + 1

          • cao:=cao - 1

        • nếu không,

          • if (matrix [i] [low] + matrix [j] [high])

            • thấp:=thấp + 1

          • nếu không,

            • cao:=cao - 1

  • trả lại res

Ví dụ (Python)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

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

Đầu ra

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