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

LeetCode442 数组中重复的数据|原地哈希空间优化算法C++深度题解

大家好,今日完成中等难度数组算法刷题,攻克面试高频空间限制难题。
本题核心考点:严格限制O(n)时间复杂度、只能常数额外空间,不能新开哈希表,力扣经典数组思维题。

题目题意

长度为n的数组,数字范围全部在 [1,n] 之间,每个数字最多出现2次,找出所有出现2次的数字。
硬性要求:不能使用map、set等额外哈希容器,只能原地修改数组完成求解。

核心原地哈希算法思路

利用题目数字特性:数组长度n、数值范围1~n,数字 x 天然可以对应数组下标 x-1 ,用原数组自身做哈希表,完全不占用额外空间。

1. 遍历每一个数字,取出绝对值得到当前数值 x
2. 找到对应映射下标 index = x-1
3. 判断下标位置数字正负:- 数字为负数:代表这个下标对应的数字之前已经出现过,当前数字就是重复答案
- 数字为正数:把下标位置数字取反变负数,做出现标记
4. 全程只遍历一遍数组,时间O(n),空间只有答案数组,完全符合题目常数空间要求

样例原理讲解

输入 [4,3,2,7,8,2,3,1]
数字4 → 下标3,把nums[3]取反
数字3 → 下标2,把nums[2]取反
遍历到数字2时,对应下标1位置已经是负数,证明2重复,加入答案
遍历到数字3时,对应下标2位置已经是负数,证明3重复,加入答案
最终输出 [2,3] ,和样例完全匹配

C++完整AC可运行代码

class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
vector<int> res;
// 原地数组哈希:数值nums[i]对应下标nums[i]-1
for(int i=0;i<nums.size();i++){
int idx = abs(nums[i]) - 1;
// 位置已经被标记过,说明当前数字重复
if(nums[idx] < 0){
res.push_back(abs(nums[i]));
}
// 取反标记,代表数字已经出现过一次
nums[idx] = -nums[idx];
}
return res;
}
};

算法考点总结

原地数组哈希是数组面试王牌解法,专门解决数值范围和数组长度匹配的查找、重复问题。
不用额外哈希容器,原地修改正负标记出现次数,是字节、华为、腾讯高频笔试原题,吃透数组下标映射思维,区间查找题型全部通用。

http://www.jsqmd.com/news/659291/

相关文章:

  • Qwen1.5-1.8B-GPTQ-Int4部署教程:WSL2环境下Windows本地轻量AI开发环境搭建
  • 113页精品PPT | 智慧校园智能化系统方案
  • 新手安装HBase
  • 跨平台开发实战:ClearerVoice-Studio在Qt应用中的集成
  • 维普AI检测到底查什么?搞懂原理才能有效降AI率
  • 生成式AI搜索优化失效真相:从BERT重排到MUM升级,3层语义理解断层如何精准修复?
  • GEMINI编代码时输不出iloc[0]
  • 千问3.5-9B Visual Studio Code高效插件配置与AI编程工作流
  • Qt Widget控件属性详解
  • Elasticsearch实战篇:索引库、文档与JavaRestClient操作指南
  • 【路径规划】基于A_star算法实现三机器人仓储巡逻路径规划附Matlab代码
  • 一个好用的AI驱动的日志分析工具 - RCA Agent Portal
  • **编译器优化新视角:基于LLVM的循环展开与向量化实战解析**在现代高性能计算和嵌入式
  • LeetCode热题100-最长公共子序列
  • Flutter 入门第八课:网络请求与数据解析(对接后端实战)
  • Abaqus Cohesive单元疲劳损伤的UMAT实现与工程验证
  • 【独家首曝】SITS2026未公开实验数据:传统RAG补全 vs. 新型Control-Code Modeling,响应延迟下降63%!
  • 不止于使能:用汇川PLC功能块封装,实现伺服轴状态管理与安全逻辑
  • 刚学编程不会debug?6个傻瓜式排查步骤,Python/Java/C通用,90%报错自己就能解决不用求人
  • 零基础上手DeepSeek-OCR-2:本地智能OCR工具保姆级部署教程
  • **图算法新视角:用Python实现最短路径的多种策略与性能对比**在现代软件开发中,**图算法**早已成为解决复杂问
  • IndexTTS-2-LLM快速入门:免费、本地化、高可用的语音合成解决方案
  • LFM2.5-1.2B-Thinking-GGUF从零开始:无Python环境依赖的纯二进制GGUF部署方案
  • 告别Word!用Cursor和MiKTeX打造你的专属LaTeX论文写作环境(附完整配置JSON)
  • 图像处理避坑指南:为什么你的Retinex算法总产生光晕?实测3种保边滤波方案
  • MacBook全盘格式化后如何通过联网恢复重装MacOS系统
  • mac codex intel版本
  • 如何生成ADDM报告_@addmrpt.sql自动数据库诊断监控工具
  • Display Driver Uninstaller技术解析:系统级驱动清理机制深度剖析
  • 实战Python逆向:从CRC32校验值反推隐藏数据