This works because the code under
if (tab[i] == tab[j])
, ( ). .
:
if (tab.length < 2)
return tab;
int j = 0;
int i = 1;
: [1,1,1,2,2,2,3], ( , ), 2, .
j 0
i 1
while (i < tab.length) { ... }
i ( 1) ( 7). :
if (tab[i] == tab[j]) {
i++;
} else {
j++;
tab[j] = tab[i];
i++;
}
1:
tab [i], [1], 1, tab [j], [0], 1. , . 2.
2:
[i] ( [2] 1) [j] ( [0] 1). , . 3.
3:
[i] ( [3] 2) [j] ( [0] 1). . j 1. tab [j] ( [1]) tab [i] ( [3]). [1,2,1,2,2,2,3]. 4.
4:
[i] ( [4] 2) [j] ( [1] 2). , . 5.
5:
[i] ( [5] 2) tab [j] ( [1] 2). , . 6.
6:
[i] ( [6] 3) [j] ( [1] 2). . j , 2. tab [j] ( [2]) tab [i] ( [6]). [1,2,3,2,2,2,3]. , 7.
, while.
int[] B = Arrays.copyOf(tab, j + 1);
return B;
B j + 1 3, . B [1,2,3].
[1,2,3], .