220. Contains Duplicate III

来源:互联网 发布:sql server可视化界面 编辑:程序博客网 时间:2024/06/10 15:12
class Solution {    // 木桶原理public:    bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {        if ( k < 1 || t < 0 )            return false;        const long long startPos = 0x80000000; // 数据重映射        unordered_map<long long, int> _map;                for (int i = 0; i < nums.size(); ++i){            long long newNum = (long long)nums[i] - startPos; // nums[i]前加long long,避免溢出            auto iter = _map.find(newNum / (t + 1));                        if (iter != _map.end() && i - iter->second <= k)                return true;                            iter = _map.find(newNum / (t + 1) + 1);            if (iter != _map.end() && i - iter->second <= k){                if ( abs((long long)nums[iter->second] - nums[i]) <= (long long)t)                    return true;            }                        iter = _map.find(newNum / (t + 1) - 1);            if (iter != _map.end() && i - iter->second <= k){                if ( abs ((long long)nums[i] - nums[iter->second]) <= (long long)t)                    return true;            }                         _map[newNum / (t + 1)] = i; // 将一组相邻的数值映射到一个数值, 重点            //这样写错误,若newNum/(t+1)已经存在,则无法更新i值            // _map.insert(make_pair(newNum / (t + 1), i));        }        return false;    }};


注意点:

1. 注意溢出问题

0 0
原创粉丝点击