[LeetCode] 1089. Duplicate Zeros

LeetCode刷題記錄

傳送門

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. 1 <= arr.length <= 10000
  2. 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;
            }
        }
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章