Sliding window 같은 느낌의 two pointers 문제이다.
핵심은 underscore(_) 되어 있는 인덱스들은 아무 숫자여도 상관없음.
그러므로 하나의 포인터는 현재 overwrite 해야하는 인덱스, 다른 하나는 remove 할 val을 건너뛴 다음 overwrite에 사용될 값을 가리키면 된다.
class Solution {
public int removeElement(int[] nums, int val) {
int forwardIndex = 0;
int elementIndex = 0;
while (forwardIndex < nums.length) {
if (nums[forwardIndex] != val) {
nums[elementIndex] = nums[forwardIndex];
elementIndex++;
}
forwardIndex++;
}
return elementIndex;
}
}