下面的解法需要手动画图,举例去体会,只有自己手动去做了,才会有所收获。
class Solution {public void duplicateZeros(int[] arr) {int n = arr.length;//先找到最后一个元素的位置;//至于为什么要直接先设dest 为-1,这是经过研究的出的算法,你可以这样想:只有这样才能解出来,不要过于纠结,慢慢适应就行了。int cur = 0int dest = -1;while(cur < n){if(arr[cur] == 0){dest+=2;}else{dest++;}if(dest >= n-1){break;}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;if(dest>=0){arr[dest--] = 0;}}cur--;}}
}