如何减少此代码中的内存使用量

How can i reduce the memory usage in this code?

本文关键字:内存 使用量 代码 何减少      更新时间:2023-10-16

完整的问题在这里https://www.interviewbit.com/problems/random-attendance/。如果我不被允许在这里问这些问题,请告诉我。我认为我的解决方案是正确的,对于所提供的示例,我得到了预期的结果,但内存超出了错误。

bool compare (string a, string b){
return lexicographical_compare(a.begin(), a.end(), b.begin(), b.end());
}
vector<int> Solution::solve(int A, vector<int> &B) {
vector <string> x;
for(int i=0; i<A; i++){
x.push_back(to_string(i+1));
}
sort(x.begin(), x.end(), compare);
vector <int> ans;
for(int i=0; i<B.size(); i++){
ans.push_back(stoi(x[B[i]-1]));
}
return ans;
}

我只需要编写一个函数,将B[I]转换为给定A的正确值,可能会使用从A派生的额外预处理数据,从而加快/简化计算。预处理的数据应该是大约(log_10A)个整数,即最多10或20个整数。肯定不是。A刺痛。

当A很大时,您提出的解决方案失败得很惨,但对于任何A,都可以编写以O(B)运行的代码(只要A是int或long,对于任意大的A,实际速度可能应该是O(B log log A))。


作为提示,我将给您举一个例子。假设A=392908。

我们有一些B[0],我们想确定它的索引。

第一个数字是什么?是1还是2?可能是3点还是4点?一个人怎么能说出来。

事实上,有111111个索引以1开头,与2相同,而有11111个incide以4开头(与5、6、7、8、9相同)。

而剩余的数量(A-2*111111+6*111111)是用于数字3。使用这些信息不难确定B[0]索引中的第一个数字。

休息可以通过类似的程序来确定。