这个报错是因为在代码中使用了 min 函数,但编译器无法找到匹配的函数。原因是 min 函数的参数类型不一致,导致无法进行匹配。

为了解决这个问题,你可以使用条件表达式(ternary operator)来代替 min 函数,手动比较两个数并选择较小的值。

以下是修复后的代码示例:

class Solution {
public:
    bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
        int i, j, minnum = nums[0], maxnum = nums[0], bucketsize, bucketnum, tmp;
        for (i = 1; i < nums.size(); i++) {
            minnum = (nums[i] < minnum) ? nums[i] : minnum;
            maxnum = (nums[i] > maxnum) ? nums[i] : maxnum;
        }
        bucketsize = t + 1;
        bucketnum = (maxnum - minnum) / bucketsize + 1;
        vector<vector<int>> buckets(bucketnum, vector<int>());
        for (i = 0; i < nums.size(); i++) {
            tmp = (nums[i] - minnum) / bucketsize;
            for (j = -1; j <= 1; j++) {
                if (tmp + j >= 0 && tmp + j < bucketnum) {
                    for (int n : buckets[tmp + j]) {
                        if (abs(nums[i] - nums[n]) <= t && abs(i - n) <= k)
                            return true;
                    }
                }
            }
            buckets[tmp].push_back(i);
            if (buckets[tmp].size() > 1) {
                sort(buckets[tmp].begin(), buckets[tmp].end());
            }
        }
        return false;
    }
};

在这个修复后的代码中,对于每个元素 nums[i],使用条件表达式 (nums[i] < minnum) ? nums[i] : minnum(nums[i] > maxnum) ? nums[i] : maxnum 来手动比较两个数,并选择较小或较大的值,从而替代了原来的 minmax 函数。

这样修改后的代码应该可以通过编译并正常执行了。


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

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