查找具有给定总和的对,以使对的元素在Python中位于不同的行中

假设我们有一个由唯一元素和和组成的矩阵;我们必须从矩阵中找到总和等于给定总和的所有对。在这里,成对的每个元素都将从不同的行中获取。

所以,如果输入像-

2435
6987
10111412
131个1516

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,执行

    • 返回资源

    范例(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)]
    猜你喜欢