数组去重逻辑疑问:为何在外部循环中判断i==j?
解释Java代码中
i==j的判断逻辑 这段代码的核心是找出数组中首次出现的所有不重复元素,i==j的作用就是判断当前元素arr[i]是否是第一次出现,拆解逻辑如下:
内部循环的作用
内部循环for(j=0;j<i;j++)会拿当前元素arr[i]和它之前的所有元素(索引从0到i-1)逐一比对:- 如果找到和
arr[i]相等的元素,立刻执行break跳出内部循环,此时j的数值会停在小于i的位置(循环没走完就终止了)。 - 如果遍历完所有之前的元素都没找到相等值,内部循环会正常执行到
j == i时终止(因为循环条件是j < i,当j增加到等于i时,循环不再执行)。
- 如果找到和
i==j的判断逻辑
当i == j时,说明内部循环完整执行完毕——也就是arr[i]和它之前的所有元素都不重复,是第一次出现的新元素,这时候就会打印该元素并增加计数。
举几个具体例子辅助理解:
- 当
i=0(数组第一个元素10):内部循环的条件j < 0不成立,循环直接终止,j保持初始值0,此时i==j成立,打印10,count变为1。 - 当
i=1(数组第二个元素10):内部循环j=0时,arr[1] == arr[0],执行break,j停在0,此时i=1≠j=0,不执行打印和计数。 - 当
i=2(数组第三个元素20):内部循环j=0和j=1时,arr[2]和前两个元素都不相等,循环正常结束后j=2,i==j成立,打印20,count变为2。
内容的提问来源于stack exchange,提问作者Nikhil Kanojia
相关产品推荐
相关产品推荐

