放一张崩铁阿刃在这,斩除大家的霉运!!!!!
@[TOC]
特例:
- 处理情况
- 让cur退一步,dest退两步,然后正常遍历
- 从后向前完成复写步操作
**1. 双指针**
- cur位于“复写”数位置从左往右遍历
- dest执行复写指令
**2. 操作步骤**
- 判断cur的值
- dest进行复写数组值
- cur为非零,直接复写cur所指向的值
- cur为0,复写0,dest往前走一步,每一步所指向的值都复写为0
- dest--,cur--;
`class Solution {
public:
void duplicateZeros(vector<int>& arr) {
int dest=-1;
int cur = 0;
int arrSize=arr.size();
while(cur<arrSize)
{
if(arr[cur])
dest++;
else dest+=2;
if(dest>=arrSize-1)
break;
cur++;
}
if(dest==arrSize)
{
arr[arrSize-1]=0;
cur--;dest-=2;
}
//从后向前完成复写操作
while(cur>=0)
{
if(arr[cur])
arr[dest--]=arr[cur--];
else
{
arr[dest--]=0;
arr[dest--]=0;
cur--;
}
}
}
};`