281.LeetCode | 220. 存在重复元素 III

Posted 每天一个开发小知识

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了281.LeetCode | 220. 存在重复元素 III相关的知识,希望对你有一定的参考价值。

每天一个开发小知识


01


题目

在整数数组 nums 中,是否存在两个下标 i 和 j


使得 nums [i] 和 nums [j] 的差的绝对值小于等于 t


且满足 i 和 j 的差的绝对值也小于等于 ķ


如果存在则返回 true,不存在返回 false


02

思路

set 的底层实现是红黑树

查找,插入,删除的时间复杂度均为 O(logn)

因此

这题我们可以巧用数据结构 - set

用 set 保存一个可变的 k 个元素(滑动窗口,窗口大小为 k)

并且利用 set 自身接口 lower_bound 获取关键元素

// lower_bound 返回第一个大于等于 key 的元素的迭代器set<long> s;set<long>::iterator iter = s.lower_bound(key)

03

解法:巧用数据结构 - set

时间复杂度 O(n * logk),空间复杂度 O(k)

class Solution {public: bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) { set<long> s;
for (int i = 0; i < nums.size(); ++i) { auto iter = s.lower_bound(long(nums[i]) - t); if (s.end() != iter && *iter <= (long(nums[i]) + t)) { return true; }
s.insert(nums[i]); if (k < s.size()) { s.erase(nums[i - k]); } }
return false; }};

每天一个开发小知识,今天你学废了吗?

以上是关于281.LeetCode | 220. 存在重复元素 III的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 220.存在重复元素III

Leetcode 220. 存在重复元素 III (Contains Duplicate III)

Leetcode No.220 存在重复元素 III(桶排序)

Leetcode No.220 存在重复元素 III(桶排序)

LeetCode刷题模版:211 - 220

LeetCode刷题模版:211 - 220