Problem
배열에 0 이 존재하면 0 인덱스부터 오른쪽 쉬프트 합니다.
모든 쉬프트를 하고난 뒤의 배열의 모습을 구하면 됩니다.
Solution
투 포인터로 풀 수 있습니다.
0 의 갯수를 미리 카운트합니다.
추가 공간을 사용하지 않고 배열을 덮어써야 하기 때문에 마지막 인덱스부터 시작합니다.
zeroCount 는 쉬프트 횟수와 같기 때문에 arr[i + zeroCount] = arr[i] 로 값을 갱신해줍니다.
단 i + zeroCount 인덱스가 배열의 길이보다 작아야 합니다.
만약 arr[i] 가 0 이라면 그 즉시 arr[i + zeroCount] 에 0 을 넣고 인덱스를 하나 당겨줍니다.
시간복잡도는 O(n) 입니다.
Java Code
class Solution { public void duplicateZeros(int[] arr) { int zeroCount = 0; for (int a : arr) { if (a == 0) zeroCount++; } int n = arr.length; for (int i = n-1; i >= 0; i--) { int j = i + zeroCount; if (arr[i] == 0) { if (j < n) arr[j] = 0; zeroCount--; j--; } if (j < n) arr[j] = arr[i]; } } }
'알고리즘 문제 > LeetCode' 카테고리의 다른 글
| [LeetCode Easy] Rank Transform of an Array (Java) (0) | 2020.05.06 |
|---|---|
| [LeetCode Easy] Remove Element (Java) (0) | 2020.05.05 |
| [LeetCode Easy] Middle of the Linked List (Java) (0) | 2020.04.09 |
| [LeetCode] Counting Elements (Java) (0) | 2020.04.09 |
| [LeetCode Easy] Word Pattern (Java) (1) | 2020.04.09 |