[LeetCode] Contains Duplicate III
This problem gets much trickier than Contains Duplicate and Contains Duplicate II.
The basic idea is to maintain a window of k numbers. For each new number, if there exists a number in the window with difference not larger than k, then return true. When we check every number and have not returned true, return false. Remember that we need to update the windows (erase the earliest added element) after it has more than k elements.
The code is actually pretty short if we take advantage of the STL set template and its method lower_bound.
1 bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) { 2 set<long long> windows; 3 for (int i = 0; i < nums.size(); i++) { 4 auto pos = windows.lower_bound(nums[i] - t); 5 if (pos != windows.end() && *pos <= (long long)nums[i] + t) 6 return true; 7 windows.insert(nums[i]); 8 if (i >= k) windows.erase(nums[i - k]); 9 } 10 return false; 11 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步