일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 Remove Duplicates from Sorted List in c
- LeetCode 83번
- Queue
- 정수론
- KMP알고리즘
- 문자열
- 이분 탐색
- 조합론
- 시뮬레이션
- 다이나믹 프로그래밍
- 연결리스트 정렬
- 해시를 사용한 집합과 맵
- 자료 구조
- LeetCode 83 c언어
- 큐
- 유클리드 호제법
- 스택
- 브루트포스 알고리즘
- 문자열제곱
- 프로그래머스
- Today
- Total
hahn
[LeetCode - C] 27. Remove Element 본문
Given an integer array nums and an integer val, remove all occurrences of val in nums in-place. The relative order of the elements may be changed.
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 val = ...; // Value to remove
int[] expectedNums = [...]; // The expected answer with correct length.
// It is sorted with no values equaling val.
int k = removeElement(nums, val); // Calls your implementation
assert k == expectedNums.length;
sort(nums, 0, k); // Sort the first k elements of nums
for (int i = 0; i < actualLength; i++) {
assert nums[i] == expectedNums[i];
}
If all assertions pass, then your solution will be accepted.
Example 1:
Input: nums = [3,2,2,3], val = 3
Output: 2, nums = [2,2,_,_]
Explanation: Your function should return k = 2, with the first two elements of nums being 2.
It does not matter what you leave beyond the returned k (hence they are underscores).
Example 2:
Input: nums = [0,1,2,2,3,0,4,2], val = 2
Output: 5, nums = [0,1,4,0,3,_,_,_]
Explanation: Your function should return k = 5, with the first five elements of nums containing 0, 0, 1, 3, and 4.
Note that the five elements can be returned in any order.
It does not matter what you leave beyond the returned k (hence they are underscores).
Constraints:
- 0 <= nums.length <= 100
- 0 <= nums[i] <= 50
- 0 <= val <= 100
Solution 1
[LeetCode - C] 26. Remove Duplicates from Sorted Array (tistory.com)
위 글과 유사하게 풀이했다.
다만 달라진 점은 i가 val일 때 val이 아닌 수(j)를 찾아서
i에 넣어주고 j에 val을 넣어 중복되는 일이 없게했다.
int removeElement(int* nums, int numsSize, int val)
{
int i;
int j;
i = 0;
if (numsSize == 1)
{
if (nums[i] == val)
return (0);
else
return (1);
}
while (i < numsSize)
{
if (nums[i] == val)
{
j = i + 1;
while (j < numsSize && nums[j] == val)
j++;
if (j == numsSize)
return (i);
nums[i] = nums[j];
nums[j] = val;
}
i++;
}
return (i);
}
Solution 2
(leetcode 제공)
나는 nums[]의 값이 val일 경우를 기준으로 했는데
이 코드는 != 인 경우를 기준으로 했다.
더 깔끔한 것 같다.
public int removeElement(int[] nums, int val)
{
int i = 0;
for (int j = 0; j < nums.length; j++)
{
if (nums[j] != val)
{
nums[i] = nums[j];
i++;
}
}
return i;
}
Solution 3
(leetcode 제공)
i가 val일 경우 뒤(n)에서 부터 하나씩 i에 넣어주는 방식이다.
n이 val이더라도 val이 아닐 때까지 계속 치환을 해주니 결국은
배열에서 val의 값은 모두 사라진다.
public int removeElement(int[] nums, int val)
{
int i = 0;
int n = nums.length;
while (i < n)
{
if (nums[i] == val)
{
nums[i] = nums[n - 1];
n--;
} else
{
i++;
}
}
return n;
}
총평
보면 solution 1,2와 solution 3의 결괏값이 다르다.
문제에서 element의 순서는 상관없다고 명시되어 있다.
전에 문제랑 비슷해서 쉬웠다.
그리고 norm때문에 for문을 안 쓰다보니
for문 쓰는걸 계속 까먹는다..
'코딩테스트 연습 > LeetCode(C - Easy)' 카테고리의 다른 글
[LeetCode - C] 35. Search Insert Position (0) | 2022.04.06 |
---|---|
[LeetCode - C] 28. Implement strStr() (0) | 2022.03.30 |
[LeetCode - C] 26. Remove Duplicates from Sorted Array (0) | 2022.03.25 |
[LeetCode - C] 21. Merge Two Sorted Lists (0) | 2022.03.24 |
[LeetCode - C] 20. Valid Parentheses (0) | 2022.03.23 |