算法:2.复写零
2026/5/16 16:40:36 网站建设 项目流程

双指针

1089. 复写零 - 力扣(LeetCode)

解法思路:如图

虽然得到了正确答案,但从5下标开始复写是我们知道答案后看出来的。

但是我们从这知道只要能找到最后一个需要复写的数的下标就行了,因此我们构思出一个这样的代码:

cur和dest从0下标开始从前往后遍历原数组,只要cur遇到0,dest就向前移动2次,否则移动一次,直到dest>=nums.length-1就退出循环(注意,需要判断,如果dest==nums.length,dest=nums.length-1),这时cur也到达最后需要复写的下标。

cur和dest 位置均正确之后复写零问题思路也就结束了

代码实现:

public void duplicateZeros(int[] arr) { int cur=0; int dest=-1; while(dest<arr.length-1){ //找位置 if(arr[cur]==0){ dest+=2; }else{ dest+=1; } if(dest>=arr.length-1) break; cur++; } while(cur>=0){ if(dest==arr.length){ arr[dest-1]=0; dest-=2; } else{ if(dest>0){ if(arr[cur]==0){ arr[dest]=0; arr[dest-1]=0; dest-=2; }else{ arr[dest]=arr[cur]; dest-=1; } } } cur--; } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询