[LeetCode] 1089. Duplicate Zeros


使用 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. 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;
            }
        }
    }
};


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM