我试图弄清楚如何确定某些简单方法的复杂性(数组访问)。
如果我这样做,我想要一些确认。 例如这种方法。
int i = 0;
while(i < N){
clone[i][j] = clone[++i][j];
clone[i][j] = 0;
}
数组访问总和最多三个吗?一个用于clone[i][j]
另一个用于clone[++i][j]
,最后一个用于clone[i][j]
。这意味着它有±3N
数组访问?
这样的事情怎么样:
if(clone[i][j] == value1 || clone[i][j] == value2)
我可以将此视为一个数组访问,还是两个?
提前致谢!
答案 0 :(得分:2)
我将这些视为六个数组访问。
您正在访问2D数组,以及类似
的语句clone[i][j] = 0;
可以类似地写成
int temp[] = clone[i];
temp[j] = 0;
您还可以查看字节码:类似
的类class ArrayAcc
{
static void foo()
{
int array[][] = new int[2][2];
array[1][1] = 123;
}
}
用
编译和反汇编javap -c ArrayAcc.class
给出以下输出:
....
static void foo();
Code:
0: iconst_2
1: iconst_2
2: multianewarray #2, 2 // class "[[I"
6: astore_0
7: aload_0
8: iconst_1
9: aaload
10: iconst_1
11: bipush 123
13: iastore
14: return
aaload
指令加载对&#34;内部&#34;的引用。堆栈上的数组。 iastore
指令将值123
放入此内容&#34;内部&#34;阵列。
对于问题的其他部分,
if(clone[i][j] == value1 || clone[i][j] == value2)
这取决于第一个条件是否为true
。如果第一个条件是true
,那么第二个条件将不进行评估。如果你写了
if(clone[i][j] == value1 | clone[i][j] == value2)
(只需一个|
),您就可以随时查看两个条件。