这个错误表明分配器(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 数据结构来维护一个窗口,只存储当前窗口内的元素。相较于之前的方法,这个优化的版本不再需要额外的空间来存储桶或元素的信息。

修复后的代码应该可以正常执行,且不会出现内存分配错误。

C++ 算法优化:解决 LeetCode 220 题

原文地址: https://www.cveoy.top/t/topic/bdXG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录