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