You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效查找矩阵中各列值均严格小于其他行的行?

查找矩阵中满足逐列严格小于其他所有行的行

我们需要在给定矩阵中查找是否存在这样的行——该行的每一列元素都严格小于其他所有行对应列的元素。如果存在,返回该行的索引;不存在则返回无符合条件行的结果。

示例

矩阵A

A = [[7,5,8,2],
     [10,3,7,8],
     [6,2,6,1]]

矩阵A中,索引为2的行[6,2,6,1]满足条件:它的每个元素都严格小于另外两行对应列的元素,因此返回索引2。

矩阵B

B = [[7,5,8,2],
     [10,3,7,8],
     [9,5,6,7],
     [6,2,6,1]]

矩阵B中不存在满足条件的行:比如索引3的行第3列元素是6,而索引2的行对应列元素也是6,不满足严格小于的要求。

更简洁的实现方式

除了逐列循环和其他所有行逐一比较的常规写法,我们可以利用列的第二小值特性来简化逻辑,优化效率:

核心思路

如果某一行的所有元素都严格小于对应列的第二小值,那么该行必然严格小于其他所有行的对应列元素——因为第二小值是除了最小值外的次小值,只要比第二小值小,就意味着是该列的唯一最小值,且小于所有其他元素。

Python实现(两种方式)

1. 利用NumPy简化矩阵运算

import numpy as np

def find_target_row(matrix):
    arr = np.array(matrix)
    row_count = arr.shape[0]
    if row_count <= 1:
        return 0 if row_count == 1 else None
    
    # 对每一列排序,取第二小的元素
    sorted_columns = np.sort(arr, axis=0)
    second_min_per_col = sorted_columns[1]
    
    # 遍历每行检查是否满足条件
    for idx, row in enumerate(arr):
        if np.all(row < second_min_per_col):
            return idx
    return None

# 测试示例
print(find_target_row(A))  # 输出: 2
print(find_target_row(B))  # 输出: None

2. 纯Python实现(无第三方依赖)

def find_target_row(matrix):
    row_count = len(matrix)
    if row_count <= 1:
        return 0 if row_count == 1 else None
    
    # 计算每一列的第二小值
    second_min_cols = []
    # 转置矩阵获取每一列
    for col in zip(*matrix):
        sorted_col = sorted(col)
        second_min_cols.append(sorted_col[1])
    
    # 检查每行是否所有元素都小于对应列的第二小值
    for idx, row in enumerate(matrix):
        if all(num < sec_min for num, sec_min in zip(row, second_min_cols)):
            return idx
    return None

# 测试示例
print(find_target_row(A))  # 输出: 2
print(find_target_row(B))  # 输出: None

效率对比

常规逐行逐列比较的时间复杂度是O(n²m)(n为行数,m为列数),而这种基于第二小值的方法时间复杂度为O(nm log n),在行数较多时效率提升明显,代码逻辑也更简洁直观。

内容的提问来源于stack exchange,提问作者UIC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:55:20