在Python中查詢元素對,使其和等於給定值,且元素位於不同的行


假設我們有一個包含唯一元素的矩陣和一個目標和;我們需要找到矩陣中所有和等於目標和的元素對。這裡,每一對元素都必須來自不同的行。

例如:

2435
6987
10111412
1311516

目標和 = 13,則輸出為 [(2, 11), (4, 9), (3, 10), (5, 8), (12, 1)]

為了解決這個問題,我們將遵循以下步驟:

  • res := 一個新的列表

  • n := 矩陣的行數

  • 對於 i 從 0 到 n-1:

    • 對列表 matrix[i] 進行排序

  • 對於 i 從 0 到 n-1:

    • 對於 j 從 i+1 到 n-1:

      • low := 0, high := n - 1

      • 當 low < n 且 high >= 0:

        • 如果 (matrix[i][low] + matrix[j][high]) 等於目標和,則

          • pair := 使用 (matrix[i][low], matrix[j][high]) 建立一個元素對

          • 將 pair 新增到 res 的末尾

          • low := low + 1

          • high := high - 1

        • 否則:

          • 如果 (matrix[i][low] + matrix[j][high]) < 目標和,則

            • low := low + 1

          • 否則:

            • high := high - 1

  • low := low + 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)]

更新於: 2020年8月19日

119 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.