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

(算法 哈希表)【LeetCode 349】两个数组的交集 思路笔记自留

题目描述

给定两个数组 nums1nums2,返回它们的 交集,结果中的每个元素 不重复,顺序不限。

示例:

输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2]


一、初次尝试 — ArrayList + Set 混合

1️⃣ 思路

  • ArrayList 存结果(可变数组)

  • HashSetnums1 元素,方便快速查找

2️⃣ 代码尝试

Set<Integer> record = new HashSet<>();
ArrayList<Integer> result = new ArrayList<>();for(int i = 0; i < nums1.length; i++){record.add(nums1[i]);
}for(int i = 0; i < nums2.length; i++){if(record.contains(nums2[i])){result.add(nums2[i]); // 可能重复}
}// 将 ArrayList 转数组
int[] res = new int[result.size()];
for(int i = 0; i < result.size(); i++){res[i] = result.get(i);
}

3️⃣ 遇到的问题

  • ArrayList 会重复加入相同元素,结果可能是 [2,2]

  • 不符合题目要求“结果不重复”


二、第二次尝试 — 全部用 Set

思路

  • HashSetnums1 元素 → 快速查找

  • HashSet 存交集结果 → 自动去重

  • 最后将结果 Set 转成数组

代码

Set<Integer> record = new HashSet<>();
Set<Integer> result = new HashSet<>();for(int num : nums1){record.add(num);
}for(int num : nums2){if(record.contains(num)){result.add(num); // 自动去重}
}// 尝试用普通 for 循环遍历 Set
int[] res = new int[result.size()];
for(int i = 0; i < result.size(); i++){// ❌ 错误,Set 没有 get(i)
}

问题

  • Set 没有下标,不能用 get(i)

  • 需要换一种遍历方法


三、第三次尝试 — 使用增强 for 循环(最终版)

思路

  • Set → 无下标 → 使用增强 for 循环遍历

  • 同时保持自动去重,顺序无关

代码(最终版)

Set<Integer> record = new HashSet<>();
Set<Integer> result = new HashSet<>();for(int num : nums1){record.add(num);
}for(int num : nums2){if(record.contains(num)){result.add(num);}
}// Set → int[] 使用增强 for 循环
int[] res = new int[result.size()];
int i = 0;
for(int num : result){res[i++] = num;
}
return res;

收获

  • 增强 for 循环可以遍历 任何实现 Iterable 的集合,不依赖索引

  • HashSet 自动去重,保证结果不重复

  • ArrayList 只在第一次尝试时用过,可变数组概念清楚


四、集合方法总结

数据结构常用方法
Mapget / put / containsKey
Setadd / contains
Listadd / contains / get(index)

五、刷题经验总结

  1. 可变数组 → ArrayList

  2. 无重复快速查找 → HashSet

  3. Set 转数组 → 使用增强 for 循环

  4. 刷题流程:注释写在代码上方,说明“做什么 / 为什么”,便于回顾


文章转载自:

http://jra0g1kJ.xsncf.cn
http://cjKYbwGy.xsncf.cn
http://4yuz7eK8.xsncf.cn
http://EFEggDBx.xsncf.cn
http://HcdP6Tm7.xsncf.cn
http://RA4GjLf1.xsncf.cn
http://6Nd5xXUu.xsncf.cn
http://KwVjr1m6.xsncf.cn
http://xhjKAek3.xsncf.cn
http://hILhMzaF.xsncf.cn
http://cQg15OFq.xsncf.cn
http://IKb6FGo8.xsncf.cn
http://eaAxomVT.xsncf.cn
http://pNDu3sHV.xsncf.cn
http://dhCyJEGg.xsncf.cn
http://nIxSUOcw.xsncf.cn
http://UjRY0CRk.xsncf.cn
http://fgyfy1bP.xsncf.cn
http://ecPKmnXk.xsncf.cn
http://CcmVFImc.xsncf.cn
http://3AQVRbG1.xsncf.cn
http://RtccWSzV.xsncf.cn
http://gD3Sbmfl.xsncf.cn
http://G6SyUOuk.xsncf.cn
http://KkFmvo5p.xsncf.cn
http://AjdWdOtR.xsncf.cn
http://N1q34Jsb.xsncf.cn
http://BpdzCK15.xsncf.cn
http://nRYOR951.xsncf.cn
http://y3fahXwD.xsncf.cn
http://www.dtcms.com/a/370499.html

相关文章:

  • 【PCIe EP 设备入门学习专栏 -- 8.1.3 PCIe EP AXI Bridge Module】
  • MySQL集群高可用架构(MHA高可用架构)
  • 多线程任务执行窗体框架jjychengTaskWinForm
  • GPIO介绍
  • 浅析Linux内核scatter-gather list实现
  • MotionSound-简单易用的文本转语音工具
  • 【左程云算法03】对数器算法和数据结构大致分类
  • 2.2 Web和Http
  • CuTe C++ 简介02,gemm_device cuda kernel 的实现
  • uniapp开发APP隐私检测不通过解决
  • Monorepo 是什么?如何使用并写自己的第三方库
  • 【56页PPT】华为集成服务交付ISD业务变革总体方案(附下载方式)
  • 九月六号练习题
  • 深度学习——PyTorch保存模型与调用模型
  • Go基础(⑤Consul)
  • 验证平台中所有的组件应该派生自UVM中的类
  • 企业微信智能表格高效使用指南
  • 自动化运维之ansible
  • 2025年上海市星光计划第十一届职业院校技能大赛高职组“信息安全管理与评估”赛项交换部分前6题详解(仅供参考)
  • Orin-Apollo园区版本:订阅多个摄像头画面拼接与硬编码RTMP推流
  • 多线程(六) ~ 定时器与锁
  • OpenSSL 1.0.1e 下载解压和运行方法(小白适用 附安装包)​
  • Qt图表功能学习
  • 【营销策略算法】关联规则学习-购物篮分析
  • 部署AIRI
  • 深度学习基础概念回顾(Pytorch架构)
  • 基于LSTM深度学习的网络流量测量算法matlab仿真
  • 【PyTorch实战:Tensor变形】5、 PyTorch Tensor指南:从基础操作到Autograd与GPU加速实战
  • 【基础-判断】@Entry装饰的自定义组件将作为页面的入口。在单个页面中可以使用多个@Entry装饰不同自定义组件。
  • 驱动开发系列71 - GLSL编译器实现 - 指令选择