当前位置: 首页 > news >正文

LeetCode:219.存在重复元素||220.存在重复元素|||

题目要求nums[i] == nums[j] 且 abs(i - j) <= k,其实就是维护一个长为  abs(i - j)的窗口,存在nums[i] == nums[j]。此题我们可以用滑动窗口来解决,枚举右边维护左边。

C++代码:

class Solution {
public:bool containsNearbyDuplicate(vector<int>& nums, int k) {unordered_set<int> window; // 存储当前窗口内的元素int n = nums.size();for (int right = 0; right < n; right++) {// 若窗口大小超过k,移除左边界元素(保证窗口内元素下标差 <=k)if (right > k) {window.erase(nums[right - k - 1]); // 移除窗口外的左元素}// 若当前元素在窗口中存在,说明找到符合条件的重复元素if (window.count(nums[right])) {return true;}// 将当前元素加入窗口window.insert(nums[right]);}// 遍历完未找到return false;}
};

unordered_set 用 O (1) 时间快速判断元素的存在性,一旦出现重复,直接返回结果,无需存储重复元素。

220.也是同理,维护的是一个 长为  abs(i - j)的窗口。只不过窗内存在的条件不同:

C++代码:

class Solution {
public:bool containsNearbyAlmostDuplicate(vector<int>& nums, int indexDiff, int valueDiff){                                     set<int> m;int n = nums.size();for (int right = 0; right < n; right++) // 固定窗口{if (right > indexDiff)m.erase(nums[right - indexDiff - 1]);int tar = nums[right];auto it = m.lower_bound(tar - valueDiff);if (it != m.end() && *it <= tar + valueDiff)return true;m.insert(tar);}return false;}
};

set基于红黑树实现,元素会按照默认的比较规则有序存储,时间复杂度为 O(log n)。此题可以利用其 “有序性” 相关的范围查询很方便来解决abs(nums[i] - nums[j]) <= valueDiff。

总结:

当问题涉及连续的子数组、子串或区间,且需要对区间内的元素进行整体处理(如求和、计数、判断是否满足条件)时,我们就可以优先使用滑动窗口。

http://www.dtcms.com/a/314700.html

相关文章:

  • SpringDoc OpenAPI 3 和 TestContainers 的 零配置自动化API测试方案,实现从API文档生成
  • 安全策略实验报告
  • ensp防火墙用户认证综合实验
  • AI开灯的几种方法,与物理世界的交互过渡
  • 生成式人工智能展望报告-欧盟-06-深度调研-医疗、教育、网络安全
  • 《红色脉络:一部PLMN在中国的演进史诗 (1G-6G)》 第4篇 | 专题:多址技术——频谱资源“共享”的艺术 (FDMA/TDMA/CDMA)
  • 3.JVM,JRE和JDK的关系是什么
  • 《Python 实用项目与工具制作指南》· 1.1 安装Python
  • Jeston + TensorRT + Realsense D435i + ROS noetic + Yolo11 各版本模型目标检测
  • Go 函数选项模式
  • Nature Commun:电化学可及性新策略!PEDOT限域COF孔道提升铀电沉积效率46倍
  • Sklearn 机器学习 数据聚类 肘部法则选择聚类数目
  • 二叉树的概念以及二叉树的分类,添加,删除
  • 机器学习通关秘籍|Day 02:特征降维、用KNN算法和朴素贝叶斯实现分类
  • MySql的两种安装方式
  • AI编程助手:终结996的新希望
  • (论文速读)关注特征细化的图像恢复自适应稀疏变换
  • mac 锁屏不断网 2025
  • C++进阶-封装红黑树模拟实现map和set(难度较高)
  • 量子计算接口开发:Python vs Rust 性能对决
  • 前端控制台看样式
  • Flask 项目 Windows 服务器部署全流程
  • 特征降维实战:高效选择关键特征
  • [Oracle] TO_CHAR()函数
  • PandasAI连接LLM对MySQL数据库进行数据分析
  • 衡石科技HENGSHI SENSE 6.0:技术架构全面革新,开启智能分析新纪元
  • 【Pytorch✨】神经网络训练分类器
  • 分布式光伏气象站:为分散电站装上 “智慧之眼”
  • 我的创作纪念日____在 CSDN一年来的成长历程和收获
  • 【2025-08-04 Java学习小记】