leetcode #220 Contains Duplicate III

原创 2015年07月07日 11:39:42

       通过此题了解了c++ stl中的multiset数据结构,因为使用暴力查找的方法总是超时,所以改用二叉搜索树的方法。而multiset的底层实现是基于红黑树的,满足条件。所以这里借助该数据结构进行查找。具体的是在multiset中维护一个小于等于k的二叉搜索树,当超过k的时候,删除第一个元素。然后每次在树中找大于等于 nums[i]-t 的值。lower_bound方法返回的是>=当前值得第一个迭代器。因此会有 *low >= nums[i] - t,即 nums[i]-low <= t,这里要注意,虽然差是小于t,但是有可能绝对值大于t,所以还是要判断是否满足绝对值小于t这一条件。最终算法的时间复杂度为O(nlogk)。

       另外,两个值的差有可能越界,因此此处将multiset的类型设置为long long。有兴趣的可以详细学一下multiset的官方文档,对比set。


class Solution {
public:
    bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
        
        multiset<long long> bst;
        for (int i = 0; i < nums.size(); i++) {
            if (bst.size() == k+1)
                bst.erase(nums[i-k-1]);
            auto low = bst.lower_bound(nums[i]-t); // >= key 的第一个值
            if (low != bst.end() && abs(*low-nums[i]) <= t) // 避免差值过小为较大的负数
                return true;
            bst.insert(nums[i]);
        }
        return false;
    }
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Leetcode220-Contains Duplicate III

Given an array of integers, find out whether there are two distinct indices i and j in the array suc...

Contains Duplicate III - LeetCode 220

题目描述: Given an array of integers, find out whether there are two distinct indices i and j in the ar...

[leetcode ]220.Contains Duplicate III

题目: Given an array of integers, find out whether there are two distinct indices i and j in the arra...

【LEETCODE】220-Contains Duplicate III

Given an array of integers, find out whether there are two distinct indices i and j in the array  ...

Leetcode 220. Contains Duplicate III

Given an array of integers, find out whether there are two distinct indices i and j in the array suc...

220. Contains Duplicate III

Given an array of integers, find out whether there are two distinct indices i and j in the array s...

217, 219,220. Contains Duplicate I, II, III

Given an array of integers, find if the array contains any duplicates. Your function should return ...

[Leetcode 220, Medium] Contains Duplicates III

[Leetcode 220, Medium] Contains Duplicates III

[LeetCode]217. Contains Duplicate&219. Contains Duplicate II&220. Contains Duplicate III

217. Contains Duplicate 219. Contains Duplicate II 220. Contains Duplicate III

【leetcode题解】【再看一遍】【86】【M】Contains Duplicate III

Given an array of integers, find out whether there are two distinct indices i and j in the array suc...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)