Given an integer array nums,
move all 0's to the end of it while maintaining the relative order of the non-zero elements.
Note that you must do this in-place without making a copy of the array.
integer 배열 nums가 주어진다.
0을 배열의 맨뒤로 옮겨라, 단 0이 아닌 배열의 숫자 순서는 유지해야 한다.
주의 : 주어진 배열을 그대로 사용해야 한다. 다른 배열을 선언해서는 안된다.
두 개의 포인터를 이용하여서 배열의 맨 앞을 가리키도록 하여
하나는 값이 0인 배열의 인덱스를 가리키고
다른 하나는 0이 아닌 배열의 인덱스를 찾아 서로 위치를 바꾸어주도록 문제를 풀어보자
public void moveZeroes(int[] nums) {
int idx = 0; // 0을 가르키는 포인터
for (int i = 0; i < nums.length; i++) { // 0이 아닌 값을 찾는 포인터
if (nums[i] != 0) {
swap(nums, i, idx);
idx++;
}
}
}
만약 배열의 첫 인덱스가 0이 아닌 경우에는 아래 for문에서 0을 가리키는 idx의 값이 ++ 되므로 0을 찾을 때까지
idx, i가 같이 ++된다.
private void swap(int[] nums, int i, int idx) {
int tmp = nums[i];
nums[i] = nums[idx];
nums[idx] = tmp;
}
문제출처 :
https://leetcode.com/problems/move-zeroes/
'LeetCode' 카테고리의 다른 글
[Leetcode][Java] 724 Find Pivot Index (0) | 2021.12.24 |
---|---|
[Leetcode][Java] 162 Find Peak Element (0) | 2021.12.22 |
[Leetcode][Java] 88 Merge Sorted Array (0) | 2021.12.10 |
[Leetcode][Java] 704 Binary Search (0) | 2021.12.08 |
[Leetcode][Java] 347 Top K Frequent Elements (0) | 2021.08.08 |