Skip to content

Commit

Permalink
LeetCode283. Move Zeroes
Browse files Browse the repository at this point in the history
알고리즘: 투포인터(2번째 풀이), 구현(3번째 풀이)
자료구조: 큐(1번째 풀이)
사고과정
1. 첫번째 풀이.queue에 0이 아닌 숫자를 넣고 0의 숫자를 세고 합치는 방법을 썼음 -> O(2n)

2. 두번째 풀이. 투포인터 left를 하나씩 순회, right는 0이 아닌 숫자만큼 while문으로 증가시키고 발견하면 서로 바꾸는 방식. right가 length를 넘어갈 수 있으므로 제한 사항이 필요했음

3. 세번째 풀이. nums가 pass에 따라 완벽한 상황에 있어야 한다는 고정관념을 깼음. 일단 앞으로 다 땡기고 0을 뒤에 붙이면 됨.
  • Loading branch information
jinkshower committed Jul 19, 2024
1 parent 95152ad commit 2c94637
Showing 1 changed file with 60 additions and 0 deletions.
60 changes: 60 additions & 0 deletions src/main/java/review/leetcode283.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package review;

public class leetcode283 {

public void moveZeroes(int[] nums) {
// Deque<Integer> queue = new ArrayDeque<>();
// int cnt = 0;
// for (int i : nums) {
// if (i != 0){
// queue.offer(i);
// } else {
// cnt++;
// }
// }
// int size = queue.size();//1
// System.out.println(cnt);
// System.out.println(size);
// for (int i = 0; i < size; i++) {
// nums[i] = queue.poll();
// }

// for (int i = size; i < size + cnt; i++) {
// nums[i] = 0;
// }

//two pointer
// int right = 0;
// for (int left = 0; left < nums.length; left++) {
// if (right >= nums.length - 1) break;
// while(right < nums.length - 1 && nums[right] == 0) {
// right++;
// }
// //바꿀 필요가 없는 인덱스임.
// if (left == right) {
// right++;
// continue;
// }
// swap(nums, left, right);
// }

int lastZero = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
nums[lastZero] = nums[i];
lastZero++;
}
}

for (int i = lastZero; i < nums.length; i++) {
nums[i] = 0;
}
}

// private void swap(int[] nums, int left, int right) {
// int tmp;
// tmp = nums[left];
// nums[left] = nums[right];
// nums[right] = tmp;
// }
}

0 comments on commit 2c94637

Please sign in to comment.