Question
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.
Solution
Result: Accepted Time: 20 ms
Here should be some explanations.
class Solution {
public:
bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
const int ncnt = nums.size();
vector<pair<int,int>> vect(ncnt);
for(int i = 0 ; i < ncnt; i++)
vect[i].first = nums[i],vect[i].second=i;
sort(vect.begin(),vect.end());
for(int i = 0,j = 0; i < ncnt; j=++i)
while( ++j < ncnt && vect[j].first - t <= vect[i].first)
if(abs(vect[i].second-vect[j].second) <= k)
return true;
return false;
}
};
Complexity Analytics
- Time Complexity:
- Space Complexity: