在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)]
广告