【问题标题】:Min and max number from every row in matrix矩阵中每一行的最小值和最大值
【发布时间】:2019-10-18 07:54:46
【问题描述】:

我有矩阵,想法是编写一个代码,给出每一行的最大值和最小值,没有任何函数,只是纯逻辑。 例如:

最大数量应为: 567、789、900、906、897

最小数字应该是: 45、100、191、323、101

[45, 456, 321, 344, 567],
[100, 434, 173, 400, 789],
[191, 211, 457, 809, 900],
[431, 323, 432, 805, 906],
[708, 232, 897, 101, 696]
$arrNxm = [
  [45, 456, 321, 344, 567],
  [100, 434, 173, 400, 789],
  [191, 211, 457, 809, 900],
  [431, 323, 432, 805, 906],
  [708, 232, 897, 101, 696]
];

$rows = 5;
$cols = 5;

$intValue = 1;

$max = $arrNxm[0][0];

for($row = 0; $row < $rows; $row++)
{
  $max = $arrNxm[$row][0];
  for($col = 0; $col < $cols; $col++)
  {
    if($arrNxm[$row][$col] > $max)
    {
      $max = $arrNxm[$row][$col];
    }
  }
}


echo "<pre>";
var_dump($max);
echo "</pre>";

当我运行我的代码时,我只得到一个数字,我想不出我应该做什么才能得到正确的输出。

【问题讨论】:

  • 首先,它是每个row 而不是column 的最大值和最小值!
  • var_dump($max) 在内部 for.
  • 稍有改变就会跳过 1 次比较,将内部循环更改为 for($col = 1,因为您总是将值设置为 0,所以为什么要与自身进行比较。

标签: php arrays matrix


【解决方案1】:

给你:

$arrNxm = [
  [45, 456, 321, 344, 567],
  [100, 434, 173, 400, 789],
  [191, 211, 457, 809, 900],
  [431, 323, 432, 805, 906],
  [708, 232, 897, 101, 696]
];

$row = 5;
$col = 5;
$min = $max = array();

for( $i = 0; $i < $row; $i++ ) {
    $min_val = $max_val = $arrNxm[ $i ][0];    
    for( $j = 0; $j < $col; $j++ ) {
        //echo $arrNxm[ $i ][ $j ]." ";
        if( $min_val > $arrNxm[ $i ][ $j ] ) {
            $min_val = $arrNxm[ $i ][ $j ];
        }

        if( $max_val < $arrNxm[ $i ][ $j ] ) {
            $max_val = $arrNxm[ $i ][ $j ];
        }
    }
    // echo $min_val.PHP_EOL;
    $min[] = $min_val;
    $max[] = $max_val;
}
print_r( $min );
print_r( $max );

输出:

Array
(
    [0] => 45
    [1] => 100
    [2] => 191
    [3] => 323
    [4] => 101
)
Array
(
    [0] => 567
    [1] => 789
    [2] => 900
    [3] => 906
    [4] => 897
)

【讨论】:

    【解决方案2】:

    您正在用每行的最大值重写相同的变量。这就是为什么最终你将永远只有一个数字。

    相反,您应该为结果创建一个数组并分别存储每行的最大值,如下所示:

    $max = [];
    for($row = 0; $row < $rows; $row++)
    {
      $max[$row] = $arrNxm[$row][0];
      for($col = 0; $col < $cols; $col++)
      {
        if($arrNxm[$row][$col] > $max[$row])
        {
          $max[$row] = $arrNxm[$row][$col];
        }
      }
    }
    

    【讨论】:

      【解决方案3】:

      有 2 个 foreach 循环和几个 terney if

      $arrNxm = [
        [45, 456, 321, 344, 567],
        [100, 434, 173, 400, 789],
        [191, 211, 457, 809, 900],
        [431, 323, 432, 805, 906],
        [708, 232, 897, 101, 696]
      ];
      
      foreach ($arrNxm as $rkey => $row) {
          foreach ( $row as $ckey => $col) {
              // init this row in the results arrays
              if ($ckey == 0) { $min[$rkey] = PHP_INT_MAX; $max[$rkey] = 0; }              
      
              $min[$rkey] = $min[$rkey] > $col ? $col : $min[$rkey];
              $max[$rkey] = $max[$rkey] < $col ? $col : $max[$rkey];
          }
      }
      
      echo 'MAX' . PHP_EOL . print_r($max,1);
      echo 'MIN' . PHP_EOL . print_r($min,1);
      

      结果

      MAX
      Array
      (
          [0] => 567
          [1] => 789
          [2] => 900
          [3] => 906
          [4] => 897
      )
      MIN
      Array
      (
          [0] => 45
          [1] => 100
          [2] => 191
          [3] => 323
          [4] => 101
      )
      

      【讨论】:

        【解决方案4】:

        我想推荐这个

        $arrNxm = [
          [45, 456, 321, 344, 567],
          [100, 434, 173, 400, 789],
          [191, 211, 457, 809, 900],
          [431, 323, 432, 805, 906],
          [708, 232, 897, 101, 696]
        ];
        $max = array();
        $min = array();
        foreach ($arrNxm as $key) {
            array_push($max, max($key));
            array_push($min, min($key));
        }
        
        

        【讨论】:

        • 代码没关系,但是如果你仔细看我的问题,你会发现我提到代码需要只使用逻辑编写,没有任何数组函数。
        猜你喜欢
        • 2020-10-11
        • 1970-01-01
        • 1970-01-01
        • 2017-07-25
        • 2014-06-17
        • 1970-01-01
        • 1970-01-01
        • 2015-01-09
        • 1970-01-01
        相关资源
        最近更新 更多