往期参考代码
class Solution {
public:
void duplicateZeros(vector<int>& arr) {
int cur=0,dest=-1,n=arr.size();
//找位置
while(cur<n) {
if(arr[cur]) dest++;
else dest+=2;
if(dest>=n-1) break;
cur++;
}
if(dest==n) {
arr[n-1]=0;
cur--;
dest-=2;
}
while(cur>=0) {
if(arr[cur]) arr[dest--]=arr[cur--];
else{
arr[dest--]=0;
arr[dest--]=0;
cur--;
}
}
}
};
题目解析
快乐数

重复操作最后一定会得到一个循环,有且只有如图的两种情况(核心思想)




