Description
Given a fixed length array arr
of integers, 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, do not return anything from your function.
Example 1:
Input: [1,0,2,3,0,4,5,0]
Output: null
Explanation: After calling your function, the input array is modified to: [1,0,0,2,3,0,0,4]
Example 2:
Input: [1,2,3]
Output: null
Explanation: After calling your function, the input array is modified to: [1,2,3]
Note:
1 <= arr.length <= 10000
0 <= arr[i] <= 9
思路
題意:給定一個固定長度的整數數組arr,複製每次出現的零,將剩餘的元素向右移動。不使用其他輔助數據結構對輸入數組進行上述修改。
題解:不使用其他輔助數據結構對數組進行原地修改,那麼通過一個變量來記錄數組中零值的個數,從後往前遍歷,交換數組中的值。
static const auto io_sync_off = []() { // turn off sync std::ios::sync_with_stdio(false); // untie in/out streams std::cin.tie(nullptr); return nullptr; }(); class Solution { public: void duplicateZeros(vector<int>& arr) { int zeroCnt = 0; int size = arr.size(); for (int i = 0; i < size; i++){ if (arr[i] == 0) zeroCnt++; } int j = size + zeroCnt; for (int i = size - 1; i >= 0; i--){ if (--j < size) arr[j] = arr[i]; if (arr[i] == 0 && --j < size){ arr[j] = 0; } } } };