本文主要記錄一下leetcode之複寫零數組
給你一個長度固定的整數數組 arr,請你將該數組中出現的每一個零都複寫一遍,並將其他的元素向右平移。 注意:請不要在超過該數組長度的位置寫入元素。 要求:請對輸入的數組 就地 進行上述修改,不要從函數返回任何東西。 示例 1: 輸入:[1,0,2,3,0,4,5,0] 輸出:null 解釋:調用函數後,輸入的數組將被修改成:[1,0,0,2,3,0,0,4] 示例 2: 輸入:[1,2,3] 輸出:null 解釋:調用函數後,輸入的數組將被修改成:[1,2,3] 提示: 1 <= arr.length <= 10000 0 <= arr[i] <= 9 來源:力扣(LeetCode) 連接:https://leetcode-cn.com/problems/duplicate-zeros 著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。
class Solution { public void duplicateZeros(int[] arr) { int count = 0; for (int i = 0; i < arr.length; i++) { count += arr[i] == 0 ? 1 : 0; } for(int i=arr.length-1; i>=0; i--) { if(arr[i] == 0){ count--; } if(i + count < arr.length){ arr[i + count] = arr[i]; if(arr[i] == 0 && i + count + 1 < arr.length){ arr[i + count + 1] = 0; } } } } }
這裏遍歷數組,計算值爲0的個數count,而後從後遍歷數據,遇到0就遞減該值,而後判斷i + count是否超出數組長度,沒有的話則將i的值設置到i + count,緊接着再當前位置值爲0且i + count + 1不超出數組長度的時候將i + count + 1的值設置爲0。網絡