java - 移动二维矩阵中的所有零

标签 java arrays algorithm sorting

我有一个像这样的二维数组:

2 0 0 2 0 4
2 0 0 2 0 4
2 0 0 2 0 4

我想把所有的零都移到左边,所以我做了这个方法:

public static void shiftLeft(int [][] array){

    for (int j = 0; j < array.length; j++) {

        for (int i = 0; i < array.length - 1; i++) {

            if ((array[j][i] != 0) && (array[j][i + 1] == 0)) {
                array[j][i + 1] = array[j][i];
                array[j][i] = 0;
            }
        }
    }
}

但我得到的输出是这样的:

0 0 2 0 2 4
0 0 2 0 2 4
0 0 2 0 2 4

如何让所有零都向左移动?

最佳答案

在我看来,最简单的方法是使用 3 个嵌套循环。

变量 i 遍历行。

变量 j1 查找从每行左侧开始的第一个非零元素。

变量 j2 找到 j1 之后的第一个零元素并交换它们。 下面的代码假定二维矩阵 A 被声明为 A[N][M],其中 N 和 M 分别是行数和列数。

for(int i =0;i<N;i++){
  for(int j1=0;j1<M;j1++){
    if (A[i][j1]==0)
      continue;
    for(int j2=j1;j2<M;j2++){
      if( A[i][j2]==0){
         //swap
         int tmp=A[i][j1];
         A[i][j1]=A[i][j2];
         A[i][j2]=tmp;
       }
     }
  }
}

关于java - 移动二维矩阵中的所有零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47094400/

相关文章:

algorithm - 确定点是否在多边形内

java - 编辑 JTextField 时是否可以禁用 JComboBox?

java.sql.SQLException : Illegal operation on empty result set. dor select 语句

java - 天气休息服务

JavaScript 项目从数组中消失

c++ - 一维或二维数组,哪个更快?

algorithm - A-star 中成本函数的系数

java - Android 通过 RN42 蓝牙模块与 Arduino 的通信不匹配

c++ - 数组引用速度与按位运算符

c++ - 带星号 * 通配符的字符串搜索