Contains Duplicate III

首先是自己写的暴力解法,这么写就超时了
class Solution {
public:
bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t)
{
int i;
for(i=0;i<nums.size();i++)
{
for(int a=i+1;a<i+k;a++)
{
if(abs(nums[i]-nums[a])<=t)
{
return true;
}
}
}
return false;
}
};
之后是看网友的滑动窗口法
class Solution {
public:
bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
set<long> st;
for (int i = 0; i < nums.size(); i++) {
auto lb = st.lower_bound((long)nums[i] - t);
if (lb != st.end() && *lb <= (long)nums[i] + t) return 1;
st.insert(nums[i]);
if (i >= k) st.erase(nums[i - k]);
}
return 0;
}
};

浙公网安备 33010602011771号