查詢表類演算法//存在重複元素 III
阿新 • • 發佈:2018-11-11
給定一個整數陣列,判斷陣列中是否有兩個不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的絕對值最大為 t,並且 i 和 j 之間的差的絕對值最大為 ķ。
示例 1:
輸入: nums = [1,2,3,1], k = 3, t = 0 輸出: true
示例 2:
輸入: nums = [1,0,1,1], k = 1, t = 2 輸出: true
示例 3:
輸入: nums = [1,5,9,1,5,9], k = 2, t = 3 輸出:false
class Solution { public: bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) { set<long> ss; long It = t; for(int i = 0; i < nums.size(); i++){ if(i > k) ss.erase(nums[i-k-1]); set<long>::iterator it = ss.lower_bound(nums[i]-It); if(it != ss.end()&&(*it)-nums[i]<=It) return true; ss.insert(nums[i]); } return false; } };
set的特性是,所有元素都會根據元素的鍵值自動排序,set的元素不像map那樣可以同時擁有實值(value)和鍵值(key),set元素的鍵值就是實值,實值就是鍵值。set不允許兩個元素有相同的鍵值。
set的各成員函式列表如下:
1. begin()--返回指向第一個元素的迭代器
2. clear()--清除所有元素
3. count()--返回某個值元素的個數
4. empty()--如果集合為空,返回true
5. end()--返回指向最後一個元素的迭代器
6. equal_range()--返回集合中與給定值相等的上下限的兩個迭代器
7. erase()--刪除集合中的元素
8. find()--返回一個指向被查詢到元素的迭代器
9. get_allocator()--返回集合的分配器
10. insert()--在集合中插入元素
11. lower_bound()--返回指向大於(或等於)某值的第一個元素的迭代器
12. key_comp()--返回一個用於元素間值比較的函式
13. max_size()--返回集合能容納的元素的最大限值
14. rbegin()--返回指向集合中最後一個元素的反向迭代器
15. rend()--返回指向集合中第一個元素的反向迭代器
16. size()--集合中元素的數目
17. swap()--交換兩個集合變數
18. upper_bound()--返回大於某個值元素的迭代器
19. value_comp()--返回一個用於比較元素間的值的函式