Given an integer array nums
and an integer val
, remove all occurrences of val
in nums in-place
. The relative order of the elements may be changed.
Since it is impossible to change the length of the array in some languages, you must instead have the result be placed in the first part of the array nums
. More formally, if there are k
elements after removing the duplicates, then the first k
elements of nums
should hold the final result. It does not matter what you leave beyond the first k
elements.
Return k
after placing the final result in the first k
slots of nums
.
Do not allocate extra space for another array. You must do this by modifying the input array in-place
with O(1) extra memory.
val
을 제외한 배열을 반환하는 함수를 구현하는 문제입니다.
Remove Duplicates from Sorted Array처럼 변환 후 배열 개수를 반환해 해당 크기만큼 원소를 출력하여 크기를 넘긴 원소는 따로 예외 처리하지 않습니다.
그리고 다행히도 따로 정답과 동일한 결과가 아니라 내부에 원소만 있으면 답으로 처리되는 문제네요.
원소 값이 val
일 경우 우측 배열의 모든 원소를 swapping
해주면 됩니다.
다만 주의할 점은 그럴때마다 길이가 감소되고, swapping
과정 후 val
를 담은 배열의 위치가 현재 인덱스와 같아 지는 경우가 있어, 이를 조심하고 푸시면 됩니다.
class Solution {
public int removeElement(int[] nums, int val) {
int ret = nums.length;
for(int i = 0; i < ret; ){
if(nums[i] == val){
for(int j = i + 1; j < nums.length; ++j)
nums[j - 1] = nums[j];
--ret;
}
else{
++i;
}
}
return ret;
}
}