https://leetcode.com/problems/rle-iterator/description/
题目大意:一个字符串偶数位i 表示 i+1的奇数位的数字出现的次数,例如 380921 表示的其实是字符串 88811。现在每次删掉这个字符串的前k位,问删掉的最后一个数字是多少,不存在输出-1。
解题思路:
1.最开始想这复原字符串后,每次删除记录好新的起点位置,直接在数组中就能操作,可后来发现,偶数位 出现的数字可能很大,使得空间爆掉。
2.采用累加的方式,累加起点每个输入单独判断,注意使用long long要统一类型,会溢出
typedef long long ll;
class RLEIterator {
public:
ll s;
ll len;
vector<int> a;
RLEIterator(vector<int> A) {
s=0;
len = 0 ;
a=A;
for(int i=0;i<A.size();i+=2)
len+=A[i];
//cout<<"!!"<<endl;
}
int next(int n)
{
if(n-1+s >= len) { s+=n; return -1;}
else
{
int res;
ll m =s+(ll)n-1,tmp=0;
//cout<<m<<endl;
int i=0;
while(tmp<=m)
{
tmp+=(ll)a[i];
res=a[i+1];
i+=2;
}
s+=n;
//cout<<s<<" ";
return res;
}
}
};