정렬된 배열에서 중복 제거
Remove Duplicates from Sorted Array - LeetCode
Can you solve this real interview question? Remove Duplicates from Sorted Array - Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place [https://en.wikipedia.org/wiki/In-place_algorithm] such that each unique element ap
leetcode.com
비내림차순nums 으로 정렬된 정수 배열이 주어 지면 각 고유 요소가 한 번만 나타나도록 중복 항목을 제자리에서 제거합니다 . 요소의 상대적 순서는 동일하게 유지되어야 합니다 . 그런 다음 의 고유 요소 수를 반환합니다 .nums
nums의 고유 요소 수를 고려하여 k승인을 받으려면 다음 작업을 수행해야 합니다.
- nums의 첫 번째 k요소가 처음 nums에 있었던 순서대로 고유한 요소를 포함하도록 배열을 변경합니다 nums. 의 나머지 요소는 의 nums크기만큼 중요하지 않습니다 nums.
- 반환 k.
맞춤 판사:
판사는 다음 코드를 사용하여 솔루션을 테스트합니다.
int[] 숫자 = [...]; // 입력 배열
int[] ExpectNums = [...]; // 올바른 길이의 예상 답변
int k = RemoveDuplicates(nums); // 구현을 호출합니다.
Assert k == ExpectNums.length;
for (int i = 0; i < k; i++) {
nums[i] == ExpectNums[i];
}
모든 주장이 통과되면 솔루션이 승인 됩니다 .
예시 1:
입력: nums = [1,1,2]
출력: 2, nums = [1,2,_]
설명: 함수는 k = 2를 반환해야 하며 nums의 처음 두 요소는 각각 1과 2입니다.
반환된 k 외에 무엇을 남겨두는지는 중요하지 않습니다(따라서 밑줄로 표시됩니다).
예 2:
입력: 숫자 = [0,0,1,1,1,2,2,3,3,4]
출력: 5, 숫자 = [0,1,2,3,4,_,_,_,_, _]
설명: 함수는 k = 5를 반환해야 하며, nums의 처음 5개 요소는 각각 0, 1, 2, 3, 4입니다.
반환된 k 외에 무엇을 남겨두는지는 중요하지 않습니다(따라서 밑줄로 표시됩니다).
제약:
- 1 <= nums.length <= 3 * 104
- -100 <= nums[i] <= 100
- nums내림차순 으로 정렬되지 않습니다 .
1.첫번째 시도 (성공)
public int removeDuplicates(int[] nums) {
int idx = 1;
for(int i = 0 ; i < nums.length-1 ; i++){
if(nums[i] != nums[i+1] ){
nums[idx++] = nums[i+1];
}
}
return idx;
}
값이 오름차순으로 정렬이 되었다는 조건이 있기 때문에
i번째의 값과 i+1번째의 값을 처음부터 비교해가며 두 값이 다르면 중복이 아니라고 판단하였습니다.
조건을 만족하면 idx를 증가시켜 다음 idx번째에 i+1번째의 값을 넣어 중복을 제거하였습니다.
'알고리즘' 카테고리의 다른 글
[Linked List] Linked List Cycle (0) | 2023.08.28 |
---|---|
[Two Pointers] Valid Palindrome (0) | 2023.08.28 |
Rotate Array (0) | 2023.08.25 |
Best Time to Buy and Sell Stock (0) | 2023.08.23 |
Jump Game (0) | 2023.08.22 |