문제링크 - https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/?envType=study-plan-v2&envId=top-interview-150
문제 분석
- 1 <= nums.length <= 3 * 104
- -104 <= nums[i] <= 104
- nums는 오름차순으로 정렬한다.
- 추가 배열을 할당하면 안된다!
- nums 내부의 값들이 최대 두번만 반복되도록 했을 때 갯수를 반환하고 그 값들을 앞에서부터 오름차순 정렬해야한다.
문제 해결
문제 해결 로직
- int array nums을 입력받는다.
- 반복문으로 탐색한다.
- 뒤에 동일한 값이 없으면 k위치에 이동시킨다. k를 증가시킨다. 겹친 값의 개수를 초기화한다.
3-1. 뒤에 동일한 값이 있으면 겹친 값의 개수(duplicateNum)을 증가시킨다.
3-1-1. duplicateNum이 1이면 k위치에 이동시킨다. k를 증가시킨다.
- k를 반환한다.
코드 작성
class Solution {
public int removeDuplicates(int[] nums) {
int k = 0;
int duplicateNum = 0;
for(int i = 0; i< nums.length;i++){
if(i==0 || nums[i-1]!=nums[i]){
nums[k] = nums[i];
k++;
duplicateNum = 0;
}else if(duplicateNum == 0){
nums[k] = nums[i];
k++;
duplicateNum++;
}else{
duplicateNum++;
}
}
return k;
}
}
회고
- duplicateNum을 사용하면서 중복을 확인하는 부분이 복잡하다.
- else if가 생기면서 가독성이 떨어진다.
- 결국 공간복잡도와 시간복잡도상 상당히 낮은 점수를 기록했다.