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--;}}}