Java 如何从某个位置开始遍历2d数组?
我必须在整个矩阵中的任意位置X移动工件: 在每个新位置,我将其与该位置的值进行比较(为简单起见,矩阵中唯一的部分是X)。如果X从0开始,那么这样做很容易,但是在我的例子中,X块可以从矩阵中的任何位置开始,现在我首先从这个循环开始:Java 如何从某个位置开始遍历2d数组?,java,arrays,matrix,Java,Arrays,Matrix,我必须在整个矩阵中的任意位置X移动工件: 在每个新位置,我将其与该位置的值进行比较(为简单起见,矩阵中唯一的部分是X)。如果X从0开始,那么这样做很容易,但是在我的例子中,X块可以从矩阵中的任何位置开始,现在我首先从这个循环开始: for(int i = row_x;i<rows;i++) for(int j = col_x;j<cols;j++) //do something for(int i=row_x;i一种解决方案是将2D数组结构更改为1D数组,并
for(int i = row_x;i<rows;i++)
for(int j = col_x;j<cols;j++)
//do something
for(int i=row_x;i一种解决方案是将2D数组结构更改为1D数组,并在1D中工作(而不是通过算法),然后应用以下方法:
init = rows*i+j;
for(int l = init; l<size;i++){
//do things
}
init=行*i+j;
对于(int l=init;l您应该检查它是否是外部循环的第一次迭代:
for(int i = row_x; i < rows; i++)
for(int j = (i == row_x ? col_x : 0); j < cols; j++)
//do something
for(inti=row\ux;i
不要启动内部循环(从第x列开始循环列迭代,而是从第0个索引(第一列)开始)。
这将涵盖中给出的字段。您可以提供一个代码示例或将此答案作为注释。谢谢,这是一个很好的答案。“您还可以获得更好的算法复杂性(O(n)而不是O(n²))”这句话有误导性。你还忘了你花时间把2D数组转换成1D。如果矩阵有维度nxn
其中N=8
,那么在最坏的情况下,你就有2DO(8²)
。如果你先把它转换成1D,你就是在做O(8²)
转换它。然后你访问的是1D数组,在最坏的情况下…O(8 x 8)=O(8²)
…因此,如果你使用~
符号(2D:~O(8²)
与1D:~2O(8²)
相比,你在这里有双重工作@KarelG我不是想用算法来做转换,只是建议他在没有必要的情况下使用一维数组而不是二维数组。也谢谢你的评论。