먼소리여
- 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;
}
}