[ LeetCode | Java ] 80. Remove Duplicates from Sorted Array II

dokim·2023년 8월 24일
post-thumbnail

🏷️80. Remove Duplicates from Sorted Array II


1. 문제 설명

  • 주어진 정수 배열 nums는 비내림차순으로 정렬되어 있으며, 각 고유한 요소가 최대 두 번 나타나도록 인플레이스로 일부 중복을 제거하십시오. 요소의 상대적인 순서는 동일해야 합니다.

  • 일부 언어에서 배열의 길이를 변경할 수 없으므로, 대신 결과를 배열 nums의 첫 번째 부분에 배치해야 합니다. 더 정확하게 말하면, 중복을 제거한 후 k개의 요소가 있다면 nums의 첫 k개 요소는 최종 결과를 보유해야 합니다. 첫 번째 k개 요소 이후에 남은 요소는 중요하지 않습니다.

  • 숫자의 첫 번째 k 슬롯에 최종 결과를 넣은 후 k를 반환합니다.

  • 다른 배열에 대해 추가 공간을 할당하지 마십시오. 추가 메모리 O(1)을 사용하여 입력 배열을 인플레이스로 수정해야 합니다.


2. 접근 방식

26. Remove Duplicates from Sorted Array 이전 문제 비슷하여 이전 코드를 조금 활용하여 해결하였습니다.

  • nums의 길이가 0이면 0 반환
  • 오름차순으로 정렬이 되어있어 첫번째 정수 기준으로 반복문을 순차적으로 탬색하면서 중복 정수 2개까지 체크를 하고 순서대로 nums배열에 순차적으로 저장합니다.
  • 중복 정수가 2개를 초과하면 저장하지 않습니다.
  • 다른 정수가 나오면 중복 정수 체크 변수를 초기화하고 다른 정수를 nums배열 순차적으로 저장합니다.
  • 위의 과정을 nums배열 길이만큼 반복합니다.

3. 의사 코드


	if(nums길이가 0이면)
    	0리턴
    
    int k = 1;
    int count = 1; 
    for(nums의 두번째 index에서부터 탐색){
    	if(첫번째 정수 != n번째 정수){
        	num[k++] = nums[n번째 정수];
        	count = 1;    
        }
    	else if(count < 2 인 조건으로 중복 정수가 2개 이하 인지 확인)
        	num[k++] = nums[n번째 정수];
            count++;
    }
   

4. 구현 코드

class Solution {
    public int removeDuplicates(int[] nums) {
        
        if(nums.length == 0)
            return 0;
        
        int k = 1;
        int count = 1;
        for(int i = 1; i < nums.length; i++){
            if(nums[k-1] != nums[i]){
                nums[k++] = nums[i];
                count = 1;    
            }
            else if(count < 2){
                nums[k++] = nums[i];
                count++;
            }
        }
        return k;
    }
}
  • 시간 복잡도: O(n)
  • 공간 복잡도: O(1)

5. 최종 회고

  • 이전 문제를 조금 더 응요한 문제라 조금 더 빨리 풀 수 있었습니다.
  • 조금씩 leetcode 문제에 익숙해지고 있다는 느낌을 받았습니다.

0개의 댓글