在Python中查詢元素對,使其和等於給定值,且元素位於不同的行
假設我們有一個包含唯一元素的矩陣和一個目標和;我們需要找到矩陣中所有和等於目標和的元素對。這裡,每一對元素都必須來自不同的行。
例如:
| 2 | 4 | 3 | 5 |
| 6 | 9 | 8 | 7 |
| 10 | 11 | 14 | 12 |
| 13 | 1 | 15 | 16 |
目標和 = 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)]
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP