C++ 算法优化:解决 LeetCode 220 题 "存在重复元素 III" 中的内存分配错误
这个错误表明分配器(allocator)尝试分配过大的内存空间,超出了可用的内存限制。这通常是由于程序尝试分配的内存超过了系统可用的内存大小所致。
在你的代码中,使用了 INT64_MIN 初始化了 buckets 向量,这可能导致向量的大小非常大,超出了可用的内存限制,从而导致分配器错误。
为了解决这个问题,你可以考虑优化算法,减少额外的内存使用。根据题目的要求,我们只需要记录是否存在满足条件的元素对,而不需要存储每个桶中的具体元素。
以下是修复后的代码,做了相应的优化:
class Solution {
public:
bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
if (k <= 0 || t < 0 || nums.size() == 0)
return false;
set<long long> window;
for (int i = 0; i < nums.size(); i++) {
// 维持窗口大小不超过 k
if (i > k)
window.erase(nums[i - k - 1]);
// 查找有序集合中最小的大于等于 nums[i] - t 的元素
auto it = window.lower_bound(static_cast<long long>(nums[i]) - t);
if (it != window.end() && abs(*it - nums[i]) <= t)
return true;
window.insert(nums[i]);
}
return false;
}
};
这段代码使用了 set 数据结构来维护一个窗口,只存储当前窗口内的元素。相较于之前的方法,这个优化的版本不再需要额外的空间来存储桶或元素的信息。
修复后的代码应该可以正常执行,且不会出现内存分配错误。
原文地址: https://www.cveoy.top/t/topic/bdXG 著作权归作者所有。请勿转载和采集!