在Python中查找矩阵所有行共有的不同元素


假设我们有一个m x m阶的方阵;我们必须找到给定矩阵所有行共有的所有不同元素。

所以,如果输入是这样的:

13215417
1532436
15215412
1526432
21942215

那么输出将是[2,4,15]

为了解决这个问题,我们将遵循以下步骤:

  • 定义一个函数sortRows()。这将接收矩阵作为参数

  • n := 行数

  • 对于i从0到n,执行:

    • 对列表matrix[i]进行排序

  • 在主方法中,执行以下操作:

  • n := 行数

  • sortRows(matrix)

  • current_idx := 一个大小为n的列表,用0填充

  • 对于i从0到n,执行:

    • current_idx[i] := 0

  • f := 0

  • 当current_idx[0] < n时,执行:

    • value := matrix[0][current_idx[0]]

    • present := True

    • 对于i从1到n,执行:

      • 当(current_idx[i] < n 且 matrix[i][current_idx[i]] <= value)时,执行:

        • current_idx[i] := current_idx[i] + 1

      • 如果matrix[i][current_idx[i] - 1]与value不同,则

        • present := False

      • 如果current_idx[i]等于n,则

        • f := 1

        • 跳出循环

    • 如果present为真,则

      • 显示value

    • 如果f等于1,则

      • 跳出循环

    • current_idx[0] := current_idx[0] + 1

示例

让我们看看下面的实现,以便更好地理解:

 在线演示

MAX = 100
def sortRows(matrix):
   n = len(matrix)
   for i in range(0, n):
      matrix[i].sort();
def find_common(matrix):
   n = len(matrix)
   sortRows(matrix)
   current_idx = [0] * n
   for i in range (0, n):
      current_idx[i] = 0
   f = 0
   while(current_idx[0] < n):
      value = matrix[0][current_idx[0]]
      present = True
      for i in range (1, n):
         while (current_idx[i] < n and matrix[i][current_idx[i]] <= value):
            current_idx[i] = current_idx[i] + 1
         if (matrix[i][current_idx[i] - 1] != value):
            present = False
         if (current_idx[i] == n):
            f = 1
            break
      if (present):
         print(value, end = ", ")
      if (f == 1):
         break
      current_idx[0] = current_idx[0] + 1

mat = [
   [13, 2, 15, 4, 17],
   [15, 3, 2, 4, 36],
   [15, 2, 15, 4, 12],
   [15, 26, 4, 3, 2],
   [2, 19, 4, 22, 15]]
find_common(mat)

输入

[[13, 2, 15, 4, 17],
[15, 3, 2, 4, 36],
[15, 2, 15, 4, 12],
[15, 26, 4, 3, 2],
[2, 19, 4, 22, 15]]

输出

2, 4, 15,

更新于:2020年8月25日

201 次浏览

启动您的职业生涯

完成课程获得认证

开始
广告