假设我们有一个由唯一元素和和组成的矩阵;我们必须从矩阵中找到总和等于给定总和的所有对。在这里,成对的每个元素都将从不同的行中获取。
所以,如果输入像-
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,执行
排序列表矩阵[i]
对于介于0到n-1的i
低:= 0,高:= n-1
当低<n和高> = 0时,执行
如果(matrix [i] [low] + matrix [j] [high])<和,则
除此以外,
低:=低+ 1
高:=高-1
对:=使用(matrix [i,low],matrix [j,high])进行配对
在res的末尾插入对
低:=低+ 1
高:=高-1
如果(matrix [i,low] + matrix [j,high])与和相同,则
除此以外,
对于范围i +1至n的j,执行
返回资源
让我们看下面的实现以更好地理解-
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)]