-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
알고리즘: 투포인터(2번째 풀이), 구현(3번째 풀이) 자료구조: 큐(1번째 풀이) 사고과정 1. 첫번째 풀이.queue에 0이 아닌 숫자를 넣고 0의 숫자를 세고 합치는 방법을 썼음 -> O(2n) 2. 두번째 풀이. 투포인터 left를 하나씩 순회, right는 0이 아닌 숫자만큼 while문으로 증가시키고 발견하면 서로 바꾸는 방식. right가 length를 넘어갈 수 있으므로 제한 사항이 필요했음 3. 세번째 풀이. nums가 pass에 따라 완벽한 상황에 있어야 한다는 고정관념을 깼음. 일단 앞으로 다 땡기고 0을 뒤에 붙이면 됨.
- Loading branch information
1 parent
95152ad
commit 2c94637
Showing
1 changed file
with
60 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
// } | ||
} |