使用 Java 爬取 LeetCode 題目內容以及提交的AC代碼
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; } } } };