1089. 復寫零 - 力扣(LeetCode)
思路:
- 首先找到最后一個復寫的數:
雙指針算法:
1、先判斷 cur 位置上的值
2、然后決定 dest 移動一步還是兩步
3、然后判斷 dest 是否到終點了
4、最后 cur ++
- 處理越界的情況
arr[n-1] = 0
cur--
dest -= 2
- 從后往前開始復寫
代碼:
public void duplicateZeros(int[] arr) {int cur = 0;int dest = -1;int n = arr.length;//找到最后一個復寫的數字while(cur < n){if(arr[cur] != 0){dest++;}else{dest += 2;}if(dest >= n-1){break;}else{cur++;}}//判斷越界的情況if(dest == n){arr[n - 1] = 0;cur--;dest -= 2;}//從后往前開始復寫while(cur >= 0){if(arr[cur] != 0){arr[dest--] = arr[cur--];}else{arr[dest--] = 0;arr[dest--] = 0;cur--;}}}