以下是一个时间复杂度较低的算法,使用结构体的方式实现判断是否存在满足条件的两个下标 (i, j):

#include <vector>
#include <cmath>
#include <unordered_map>

struct Pair {
    int num;
    int index;
};

boolean checkPairs(const std::vector<int>& nums, int indexDiff, int valueDiff) {
    std::unordered_map<int, int> numIndexMap;

    for (int i = 0; i < nums.size(); i++) {
        int num = nums[i];
        if (numIndexMap.count(num) > 0 && std::abs(i - numIndexMap[num]) <= indexDiff) {
            if (std::abs(num - num) <= valueDiff) {
                return true;
            }
        }
        numIndexMap[num] = i;
    }

    return false;
}

该算法使用一个无序哈希表 'numIndexMap' 来记录每个数值对应的最新下标。遍历数组 'nums',对于每个数字 'num',检查 'numIndexMap' 中是否已经存在相同的数值以及下标之差是否满足条件。如果满足条件,则检查数值之差是否满足条件。如果满足条件,返回 'true'。否则,更新 'numIndexMap' 中 'num' 对应的下标为当前下标。

该算法的时间复杂度为 O(n),其中 n 是数组的长度。通过使用哈希表,可以在常数时间内快速查找数值和对应的下标,从而提高了算法的效率。

希望这次的解答能够帮助您解决问题。如果还有其他疑问,请随时提问。非常抱歉之前给出的错误答案造成的困扰。

O(n) 时间复杂度算法:判断数组中是否存在满足条件的两个下标

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

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