[Leetcode] 26. Remove Duplicates from Sorted Array

김주형·2024년 5월 6일
0

알고리즘

목록 보기
20/29
post-thumbnail

먼소리여

  • Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once
  • The relative order of the elements should be kept the same.
  • Then return the number of unique elements in nums.
  • Consider the number of unique elements of nums to be k, to get accepted, you need to do the following things:
  • Change the array nums such that the first k elements of nums contain the unique elements in the order they were present in nums initially.
  • Return k.

요구사항 정의

  • given : 비내림차순으로 정렬된 정수 배열
  • 각 고유 항목이 하나씩만 존재하도록 중복 항목을 제자리에서 제거하는 함수 구현

제약

  • 요소의 상대적 순서는 동일하게 유지되어야 한다
  • 그 다음 고유 요소 수를 return 한다
  • 숫자의 고유 요소 수를 k로 간주하고 승인을 받으려면 다음 작업을 수행해야 한다
  • nums의 처음 k개 요소가 처음 nums에 있었던 순서대로 고유한 요소를 포함하도록 배열 nums를 변경
  • k 반환

접근

  • 중복을 제거하는 자료구조를 사용해서 해결해보자
  • 정렬된 순서를 보장하면서 중복을 제거하는 LinkedHashSet 활용

import java.util.*;

class Solution {
    public int removeDuplicates(int[] nums) {
        int k = 0;
        // 중복 제거된 자료구조 생성
        Set<Integer> hashSet = new LinkedHashSet<>();
        for (int num : nums) {
            hashSet.add(num);
        }
        
        
        // 중복이 제거된 요소 출력
        System.out.println("중복 제거 후: " + hashSet);
        
        int[] duplicated = new int[hashSet.size()];
        int index = 0;
        for (int num : hashSet) {
            duplicated[index++] = num;
        }
        
         // 중복 제거된 배열 출력
        System.out.print("중복 제거된 배열: ");
        for (int num : duplicated) {
            System.out.print(num + " ");
        }
        
        return duplicated.length;
    }
}

...??????? 맞왜틀

Wrong Answer
Runtime: 4 ms
Your input
[1,1,2]
[0,0,1,1,1,2,2,3,3,4]
stdout
중복 제거 후: [1, 2]
중복 제거된 배열: 1 2 중복 제거 후: [0, 1, 2, 3, 4]
중복 제거된 배열: 0 1 2 3 4 
Output
[1,1]
[0,0,1,1,1]
Expected
[1,2]
[0,1,2,3,4]

투포인터로 접근

class Solution {
    public int removeDuplicates(int[] nums) {
        int k = 1;
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] != nums[i-1]) {
                nums[k] = nums[i];
                k++;
            }
        }
        return k;
        
    }
}
profile
근면성실

0개의 댓글