Given a fixed-length integer array arr
, duplicate each occurrence of zero, shifting the remaining elements to the right.
Note that elements beyond the length of the original array are not written. Do the above modifications to the input array in place and do not return anything.
Example 1:
Input: arr = [1,0,2,3,0,4,5,0] Output: [1,0,0,2,3,0,0,4] Explanation: After calling your function, the input array is modified to: [1,0,0,2,3,0,0,4]
Example 2:
Input: arr = [1,2,3] Output: [1,2,3] Explanation: After calling your function, the input array is modified to: [1,2,3]
Constraints:
1 <= arr.length <= 104
0 <= arr[i] <= 9
var duplicateZeros = function(arr) { const rounds = arr.length for(let i = 0; i < rounds; i++) { if (arr[i] === 0) { arr.splice(i, 0, 0) i++ } } arr.length = rounds };
這題一樣是必須直接改 input 的 array。
不使用多餘的記憶體空間時,控制迴圈中的位置。
大致解法如下:
- 定義一個原始迴圈的尺寸
- 進入迴圈後,注意目前迴圈的位置,當增加陣列的內容時,為了避免重複計算,把陣列的位置往下推進一格。