双指针
阅读理解难题,i指针表示当前末尾要添加元素的个数,j表示添加下一个填充的位置,f则标识当前应当填1还是2,填1的时候则更新答案。
class Solution {
public:
int a[100010];
int magicalString(int n) {
if(n<4) return 1;
a[1]=1,a[2]=a[3]=2;
int res=1;
int i,j;
int f=1;
for(i=3,j=4;j<=n;i++){
if(f==1){
int t=a[i];
while(j<=n&&t--) a[j++]=1,res++;
f=2;
}else{
int t=a[i];
while(j<=n&&t--) a[j++]=2;
f=1;
}
}
return res;
}
};
时间复杂度:O(n)。
空间复杂度:O(n)。