[LeetCode][Java] Remove Element
문제
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.
제한사항
- 0 nums.length 100
- 0 nums[i] 50
- 0 val 100
접근
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;
}
}
Author And Source
이 문제에 관하여([LeetCode][Java] Remove Element), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@redgem92/LeetCodeJava-Remove-Element저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)