https://leetcode.com/problems/move-zeroes/description/?envType=study-plan-v2&envId=leetcode-75
2중 for문을 활용하면 너무 쉬운 문제다.
O(N)으로 푸는 방법을 생각해봐야 한다.
문제 카테고리가 투포인터이므로 포인터 두개를 활용할 수 있는 방법으로 해야 한다.
0이 아닌 것을 찾았을 때 left와 right를 swap하고, left 인덱스를 증가시켜주면 된다.
class Solution {
public void moveZeroes(int[] nums) {
int left = 0;
for (int right=0; right<nums.length; right++) {
if (nums[right] != 0) {
int temp = nums[right];
nums[right] = nums[left];
nums[left++] = temp;
}
}
}
}
아니면 문제가 나머지 값들의 순서 보장이라고 했으므로
별도의 인덱스를 주어 나머지 값 먼저 넣고, 차이가 나는 만큼 마지막에 0 넣어주는 방법도 있다.
class Solution {
public void moveZeroes(int[] nums) {
int index = 0;
for (int num : nums) {
if (num != 0) {
nums[index++] = num;
}
}
while (index < nums.length) {
nums[index++] = 0;
}
}
}