c++ - 如何减少此代码中的内存使用量?
问题描述
完整的问题在这里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_10 A)个整数,即最多10或20个整数。不一定不是 A 刺痛。
当 A 很大时,您提出的解决方案会惨遭失败,但是可以为任何 A 编写以 O(B) 运行的代码(只要 A 是 int 或 long long,实际速度可能应该是 O(B log log A) 为任意大的 A)。
作为提示,我会给你一个例子。假设 A = 392,908。
我们有一些 B[0],我们想确定它的索引。
第一个数字是什么?是1还是2?可能是3还是4?怎么能说出来。
事实上,正好有 111,111 个索引以 1 开头并且与 2 相同,而有 11,111 个索引以 4 开头(与 5、6、7、8、9 相同)。
而剩余数量(A - 2*111,111+6*11,111)用于数字 3。使用此信息不难确定 B[0] 索引中的第一个数字。
休息可以通过类似的程序确定。
推荐阅读
- c# - File Watcher 控制台应用程序在执行一次后关闭
- javascript - 页面滚动jQuery功能不起作用
- python - 通过方法调用Odoo 10 python弹出窗口不会触发
- .net - Unity Container - 将动态 DbContext 依赖注入到服务中
- c# - 如何从代码后面访问数据到 MVVM
- r - 拆分或分离类“字符”的对象
- symfony - Chromedriver Centos 7 Headless
- python - 在分水岭opencv之后查找轮廓
- python - 如何在 Python 中使用队列进行线程处理时处理异常
- php - 继续重新生成一个新的 id 并检查数据库直到满足条件?