일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 사칙연산
- 시뮬레이션
- LeetCode 83 c언어
- Queue
- 재귀
- 해시를 사용한 집합과 맵
- 자료 구조
- 정렬
- 수학
- 스택
- 연결리스트 중복제거
- 연결리스트 정렬
- KMP알고리즘
- 다이나믹 프로그래밍
- 조합론
- 브루트포스 알고리즘
- 임의 정밀도 / 큰 수 연산
- 정수론
- 문자열제곱
- 실패함수
- 큐
- LeetCode 83번
- 이분 탐색
- 큰 수 연산
- 별 찍기
- 유클리드 호제법
- 구현
- LeetCode Remove Duplicates from Sorted List in c
- 프로그래머스
- 문자열
- Today
- Total
hahn
[LeetCode - C] 26. Remove Duplicates from Sorted Array 본문
[LeetCode - C] 26. Remove Duplicates from Sorted Array
hahn 2022. 3. 25. 02:52Given 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.
Since it is impossible to change the length of the array in some languages, you must instead have the result be placed in the first part of the array nums. More formally, if there are k elements after removing the duplicates, then the first k elements of nums should hold the final result. It does not matter what you leave beyond the first k elements.
Return k after placing the final result in the first k slots of nums.
Do not allocate extra space for another array. You must do this by modifying the input array in-place with O(1) extra memory.
Custom Judge:
The judge will test your solution with the following code:
int[] nums = [...]; // Input array
int[] expectedNums = [...]; // The expected answer with correct length
int k = removeDuplicates(nums); // Calls your implementation
assert k == expectedNums.length;
for (int i = 0; i < k; i++) {
assert nums[i] == expectedNums[i];
}
If all assertions pass, then your solution will be accepted.
Example 1:
Input: nums = [1,1,2]
Output: 2, nums = [1,2,_]
Explanation: Your function should return k = 2, with the first two elements of nums being 1 and 2 respectively.
It does not matter what you leave beyond the returned k (hence they are underscores).
Example 2:
Input: nums = [0,0,1,1,1,2,2,3,3,4]
Output: 5, nums = [0,1,2,3,4,_,_,_,_,_]
Explanation: Your function should return k = 5, with the first five elements of nums being 0, 1, 2, 3, and 4 respectively.
It does not matter what you leave beyond the returned k (hence they are underscores).
Constraints:
- 1 <= nums.length <= 3 * 104
- -100 <= nums[i] <= 100
- nums is sorted in non-decreasing order.
Solution 1
i번째 숫자보다 큰 숫자를 찾아 i + 1에 넣는 방법으로 진행했다.
numsSize가 1인 경우 nums[j]는 에러를 반환하니
따로 예외처리해줬다.
int removeDuplicates(int* nums, int numsSize)
{
int i;
int j;
i = 0;
if (numsSize == 1)
return (numsSize);
while (i < numsSize)
{
j = i + 1;
while (j < numsSize && nums[i] >= nums[j])
j++;
if (j == numsSize)
break;
nums[++i] = nums[j];
}
numsSize = i + 1;
return (numsSize);
}
총평
분명 쉬운 문제인데 왜 이렇게 오래걸렸는지 모르겠다.
C로 갈아타서 그런가??
'코딩테스트 연습 > LeetCode(C - Easy)' 카테고리의 다른 글
[LeetCode - C] 28. Implement strStr() (0) | 2022.03.30 |
---|---|
[LeetCode - C] 27. Remove Element (0) | 2022.03.25 |
[LeetCode - C] 21. Merge Two Sorted Lists (0) | 2022.03.24 |
[LeetCode - C] 20. Valid Parentheses (0) | 2022.03.23 |
[LeetCode - C] 14. Longest Common Prefix (0) | 2022.03.23 |