Given an array of integers, find out whether there are two distinct indices i and j in the array such that the difference between nums[i] and nums[j] is at most t and the difference between i and j is at most k.
1 class Solution { 2 public: 3 bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) { 4 multiset <long long> bst; 5 for(int i=0;i<nums.size();i++) 6 { 7 if(bst.size()==k+1) bst.erase(bst.find(nums[i-k-1])); 8 auto lb=bst.lower_bound(nums[i]); 9 if(lb!=bst.end()&&abs(*lb-nums[i])<=t) return true; 10 auto ub=bst.upper_bound(nums[i]); 11 if(ub!=bst.begin()&&abs(*(--ub)-nums[i])<=t) return true; 12 bst.insert(nums[i]); 13 } 14 return false; 15 } 16 };
lower_bound 返回大于等于n的最小键值的序号。
upper_bound 返回小于n的最大键值的序号+1.
返回的位置均为可直接插入的位置。