深圳联雅网站建设,公司注册步骤流程,商超运营与管理,网站开发包括哪些工作力扣 1089 复写零 思路#xff1a;双指针
第一步#xff1a;利用指针 cur 去记录最后一位要复写的数 #xff0c; 利用指针 dest 指向最后一位数所要复写的位置#xff1b;
实现过程#xff1a;最开始 cur 指向0#xff0c;dest 指向 -1 #xff0c; 当arr[cur] ! … 力扣 1089 复写零 思路双指针
第一步利用指针 cur 去记录最后一位要复写的数 利用指针 dest 指向最后一位数所要复写的位置
实现过程最开始 cur 指向0dest 指向 -1 当arr[cur] ! 0 时dest 走两步 否则 走一步 判断dest是否已经处于数组最末端的位置 或者已经越界
第二步 如果数组已经越界 让 arr[arr.size()-1] 0; dest - 2; cur --; 第三步 依次按要求从后往前完成复写。
class Solution {
public:void duplicateZeros(vectorint arr) {int cur 0 , dest -1;//确定要复习的最后一位数使用cur指针指向while(cur arr.size()){if(arr[cur] !0){dest;}else{dest 2;}//当dest指针指向数组最后一个位置或者越界一位跳出循环不再让cur 往后走if(dest arr.size()-1){break;}cur;}// 如果dest处于arr.size()的位置if(dest arr.size()){arr[arr.size()-1] 0;dest -2;--cur;}// 从右往左依次完成复while(cur 0){if(arr[cur]){arr[dest--] arr[cur--];}else{arr[dest--] 0;arr[dest--] 0;cur--;}}}
};