27. Remove Element

Two Pointers

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
private void swap(int[] nums, int i, int j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}

public int removeElement(int[] nums, int val) {
// 将 val 全部交换到最后
int nonValIndex = nums.length - 1;

for (int i = nums.length - 1; i >= 0; i--) {
if (nums[i] == val) {
swap(nums, i, nonValIndex--);
}
}

return nonValIndex + 1;
}
}

Two Pointers

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public int removeElement(int[] nums, int val) {
int i = 0;
for (int j = 0; j < nums.length; j++) {
if (nums[j] != val) {
nums[i++] = nums[j];
}
}

return i;
}
}

Two Pointers

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public int removeElement(int[] nums, int val) {
int i = 0, j = nums.length - 1;
while (i <= j) {
if (nums[i] == val) {
nums[i] = nums[j--]; // 注意此处没有 i++,因为 nums[i] 可能依然为 val
} else {
i++;
}
}

return i;
}
}

References

27. Remove Element