Notice
Recent Posts
Recent Comments
Link
오늘도 개발
9. Move Zeros 본문
문제
https://leetcode.com/explore/learn/card/fun-with-arrays/511/in-place-operations/3157/
nums 배열의 0을 모두 끝으로 이동시켜라.
0이 아닌 요소는 순서를 그대로 유지해야 하고 in-place 방식을 사용해야 한다.
Input: nums = [0,1,0,3,12]
Output: [1,3,12,0,0]
내가 해결한 방식
i는 0을 찾는 포인터,
j는 0이 아닌 걸 찾는 포인터.
i는 0에서, j는 1에서 시작.
i가 0이고 j가 0이 아니면
i 요소와 j 요소 교체
Input이 [1, 2, 3, 1]인 경우 [1, 2, 1, 3]으로 잘못된 결과 나옴
[1, 2, 3, 1]인 경우 i가 j보다 커지는 경우가 생겨서 발생한 에러.
void moveZeroes(int* nums, int numsSize){
int i = 0;
int j = 1;
while (i < numsSize && j < numsSize){
// i는 0을 가리키게 만듦
if (nums[i] != 0) i++;
// j는 0이 아닌 걸 가리키게 만듦
if (nums[j] == 0) j++;
if (j < numsSize && i < numsSize){
if (nums[j] != 0){
// i가 0이고 j가 0이 아닐 때 두 요소 교체
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
i++;
j++;
}
}
}
}
리트코드 해결책
zero_index는 0인 요소를 가리키는 포인터
i는 0이 아닌 요소를 가리키는 포인터
def moveZeroes(self, nums: List[int]) -> None:
zero_index = 0
for i in range(len(nums)):
if nums[i] != 0:
nums[i], nums[zero_index] = nums[zero_index], nums[i]
zero_index += 1
'자료구조 & 알고리즘 > Leetcode' 카테고리의 다른 글
| 11. Remove Element (0) | 2022.05.31 |
|---|---|
| 10. Sort Array By Parity (0) | 2022.05.26 |
| 8. Replace Elements with Greatest Element on Right Side (0) | 2022.05.22 |
| 7. Valid Mountain Array (0) | 2022.05.20 |
| 6. Check If N and Its Double Exist (0) | 2022.05.19 |