문제 먼저 읽기
- nums 정수 배열과 val 정수 1개가 주어진다.
- val과 같은 수를 nums에서 제거한다.
- 제거된 정수 외의 다른 수만 남긴 결과를 nums 배열에 저장한다.
- 남은 수의 개수 k를 반환한다.
Input: nums = [3,2,2,3], val = 3
Output: 2, nums = [2,2,_,_]
- k개의 수 뒤에는 뭐가 들어가든 상관없다.
어떻게 풀까?
생각
- pointer를 이용해서 풀면 시간복잡도
O(n)
으로 풀 수 있을 것 같다.
수도코드
class Solution {
public int removeElement(int[] nums, int val) {
int k = 0;
int curl = 0;
for (int pointer=0; pointer<nums.length; pointer++) { // nums배열을 탐색한다.
if (nums[pointer]!=val) { // 만약 같지 않다면
nums[curl++] = nums[pointer];
k++
}
}
return k;
}
}
결과
다른 풀이 방식과 문제 회고
class Solution {
public int removeElement(int[] nums, int val) {
int elem=0;
for(int i=0; i<nums.length; i++){
if(nums[i]!= val){
nums[elem]=nums[i];
elem++;
}
}
return elem;
}
}
- 내 코드에서
curl
과k
를 별도로 생각할 필요가 없었다..! - 그 외 전체적인 구현 로직은 비슷했다.
- 이전 LeatCode : 88. Merge Sorted Array 풀이 경험이 도움이 되었다.