首页 > 解决方案 > 从PHP中的NxN矩阵中删除总和最小的行

问题描述

如果原始矩阵是

$input = [
    [123, 22, 33],
    [1, 2, 1],
    [82, 90, 12],
];

输出应如下所示:

$expected = [
    [123, 22, 33],
    [82, 90, 12],
];

我试图通过 $min_row = $a[$i] 获得最小行,然后在第一个 for 循环中进行比较。

function deleteRowWithSmallestSum($a){
    $N=sizeof($a);
    $M =sizeof($a);

    $mat = array();
    
   // $min_row =  $a[$i];

    for($i=0; $i<$N; $i++){
        $min_row =  $a[$i];
        
        if($a[$i]<$min_row){
            $a[$i] = $min_row;
           unset($a[$i]);
            
        }

        for($j=0; $j<$M; $j++){
            $mat[$i][$j] = $a[$i][$j];
        }
    }
    return $mat;



}
$a = [[455,1,2],
    [1,1,1],
    [11,222,3333]];

print_r($a);


deleteRowWithSmallestSum($a);

标签: phpmatrix

解决方案


function deleteRowWithSmallestSum($a){
    $matrixSizeN = sizeof($a);
    if($matrixSizeN==0){
      return $a;
    }
 
    $minIndex = -1;
    if(sizeOf($a[0])!=$matrixSizeN){
        // Invalid matrix and do something
    }
    $minValue = $array_sum($a[0]);
    
    for($i=1; $i<$matrixSizeN; $i++){
        if(sizeOf($a[$i])!=$matrixSizeN){
        // Invalid matrix and do something
        }
        $tempValue = $array_sum($a[$i]);
        
        if($tempValue<$minValue){ // open issue about two lines with same minimum
        $minValue = $tempValue;
        $minIndex = $i;
        }
    }
    if($minIndex!=-1){
      unset($a[$minIndex]);
    }
    return array_values($a);
}

推荐阅读