JS Snippets¶
In-place¶
This is some code which removes consequtive duplicates from an array.
function removeDuplicates(a) {
let i = 0;
for (j = 1; j < a.length; j++) {
if (a[i] != a[j]) {
i++;
a[i] = a[j];
}
}
return i + 1;
}
How does this work? Say we want to remove duplicates from an array such as [0, 1, 1, 2]
. The code above steps through the following.
step |
i |
j |
(a[i] != a[j]) |
0,1,1,2 |
|
---|---|---|---|---|---|
1 |
start |
0 |
1 |
0 != 1 > true |
0,1,1,2 |
end |
1 |
1 |
a[1] = a[1] |
0,1,1,2 |
|
2 |
start |
1 |
2 |
1 != 1 > false |
0,1,1,2 |
end |
1 |
2 |
no action |
0,1,1,2 |
|
3 |
start |
1 |
3 |
1 != 2 > true |
0,1,1,2 |
end |
2 |
3 |
a[2] = a[3] |
0,1,2,2 |
|
4 |
start |
2 |
4 |
2 != - > true |
0,1,2,2 |
end |
3 |
4 |
a[3] = a[4] |
0,1,2 |
step 1 does seem to be pointles as the original array has the element at index position 1 set to equal the (same!) element at index position 1. Obviously this results in no change to the original array.
step 2 also results in no change. This time the condition in the if clause is not met and so i
is not incremented and also no change is made to the array.
step 3 is the first step which results in a change to the array. The if clause evaluates to true so i
is incremented by 1 and a[2]
(1) is set equal to a[3]
(2). So, now the array is [0,1,2,2]
.
step 4 results in the last element in the array being deleted. The if clause evaluates to true so i
is incremented by 1 to equal 3 and then a[3]
is set equal to a[4]
. However, a[4]
does not exist. So, the effect of setting a[3]
to a non existant element is that a[3]
now ceases to exist ie. a[3]
, the last element in the array, is removed from the array.
return value There are no more steps as the condition j < a.length
is no longer true. The value of i +1
(4) .