Notice
Recent Posts
Recent Comments
Link
오늘도 개발
4. Remove Element 본문
문제
입력된 배열 nums 에서 값이 val인 요소 모두 삭제.
삭제 후 남은 요소는 빈 칸 없이 앞에서부터 접근할 수 있어야 함.
삭제 후 남은 요소의 개수 k 반환할 것.
내가 생각한 방식
앞에서부터 i로 검색, 뒤에서부터 j로 검색.
둘 다 val이 아닌 경우 nums[i]와 nums[j] 교체.
=> 인풋이 [1], 1인 경우 런타임 에러 발생.
int removeElement(int* nums, int numsSize, int val){
int k = 0;
int j = numsSize - 1;
int i = 0;
while (i < numsSize && j >= 0){
if (nums[i] != val){
k++;
i++;
}
else {
// [1], 1인 경우 j가 while문이 끝난 후 -1이 됨
// nums[-1]에 접근해야 하므로 오류 발생
while(nums[j] == val){
j--;
}
nums[i] = nums[j];
i++;
j--;
}
}
return k;
}
해결책
i, j 모두 0부터 검사.
i는 모든 요소를 검사하는 포인터,
j는 nums[i]가 val인 경우를 찾는 포인터.
nums[i]가 val인 경우 j는 그대로 두고 i만 앞으로 이동.
nums[i]가 val이 아닌 경우 nums[i], nums[j] 교체 후 j, i 둘 다 앞으로 이동.
http://yucoding.blogspot.com/2013/03/leetcode-question-81-remove-element.html
int removeElement(int* nums, int numsSize, int val){
int i = 0;
int j = 0;
while(i < numsSize){
if (nums[i] != val){
nums[j] = nums[i];
j++;
}
i++;
}
return j;
}
'자료구조 & 알고리즘 > Leetcode' 카테고리의 다른 글
| 6. Check If N and Its Double Exist (0) | 2022.05.19 |
|---|---|
| 5. Remove Duplicates from Sorted Array (0) | 2022.05.18 |
| 3. Merge Sorted Array (0) | 2022.05.16 |
| 2. duplicate Zeros (0) | 2022.05.14 |
| 1. Find Numbers with Even Number of Digits (0) | 2022.05.06 |