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

LeetCode 每日一题笔记 日期:2026.05.20 题目:2657. 找到前缀公共数组

LeetCode 每日一题笔记

0. 前言

  • 日期:2026.05.20
  • 题目:2657. 找到前缀公共数组
  • 难度:中等
  • 标签:数组、哈希表、计数

1. 题目理解

问题描述
给你两个长度为n、下标从0开始的整数数组AB
定义前缀公共数组C为:C[i]等于数组AB中下标从0i的部分中公共元素的个数
返回前缀公共数组C

示例

输入:A = [1,3,2,4], B = [3,1,2,4]
输出:[0,2,3,4]

2. 解题思路

核心观察

  • 一个数字成为公共元素,当且仅当它在AB的前i项中各出现一次
  • 用计数/哈希表统计每个数字出现次数,次数达到 2时,说明是公共元素。

算法步骤

  1. 遍历每个下标i
  2. 依次把A[i]B[i]加入统计。
  3. 每次加入后检查计数是否为 2,若是则公共数+1
  4. 把当前公共数存入结果数组。

3. 代码实现

packagelc2657;importjava.util.HashMap;classSolution{publicint[]findThePrefixCommonArray(int[]A,int[]B){intn=A.length;intcount=0;int[]res=newint[n];HashMap<Integer,Integer>map=newHashMap<>();for(inti=0;i<n;i++){map.computeIfAbsent(A[i],k->0);map.put(A[i],map.get(A[i])+1);if(map.get(A[i])==2){map.put(A[i],0);count++;}map.computeIfAbsent(B[i],k->0);map.put(B[i],map.get(B[i])+1);if(map.get(B[i])==2){map.put(B[i],0);count++;}res[i]=count;}returnres;}}

4. 代码优化说明

减少if分支判断,用数组替代哈希表更快更简洁:

classSolution{publicint[]findThePrefixCommonArray(int[]A,int[]B){intn=A.length;int[]res=newint[n];int[]count=newint[n+1];intcommon=0;for(inti=0;i<n;i++){if(++count[A[i]]==2)common++;if(++count[B[i]]==2)common++;res[i]=common;}returnres;}}

5. 复杂度分析

  • 时间复杂度O(n)O(n)O(n)
    一次遍历完成所有统计与赋值。
  • 空间复杂度O(n)O(n)O(n)
    使用计数数组/哈希表存储元素出现次数。

6. 总结

  • 核心思路:计数统计 + 一次遍历
  • 关键:元素出现两次即为公共元素,直接计数即可。
  • 优化版用数组替代哈希表,速度更快、代码更短。
http://www.jsqmd.com/news/855717/

相关文章:

  • CacheTool OPcache管理:如何优化PHP字节码缓存性能的终极指南
  • CausalImpact最佳实践:避免因果推断中的7个常见陷阱
  • Redis分布式锁进阶第八十一篇
  • CDCS项目医疗AI竞赛专题:肺部结节智能诊断与医药化学优化
  • 2026年热镀锌地脚双头U型不锈钢螺栓正规生产厂家货源与产品优势 - 栗子测评
  • 2026年知名的智能装备拖链电缆/工业机器人拖链电缆稳定供货厂家推荐 - 品牌宣传支持者
  • RobotStudio 6.08里找不到DeviceNet Device?手把手教你配置DSQC652信号板(附709-1选项详解)
  • DreamTalk与3DMM参数:如何提取和利用面部表情风格特征
  • parse库错误处理与异常管理:构建可靠的字符串解析应用
  • 程序员人生规划:平衡编程工作与生活的指南
  • 《Sysinternals实战指南》进程和诊断工具学习笔记(8.15):实战案例|内存狂涨 / 句柄泄漏怎么查?用 VMMap + Handle + ListDLLs 三步定位
  • 泉州html+css 5页
  • 3D混合先验技术驱动音频生成说话头:VividTalk的创新实践与生态价值
  • 深入解析PyTorch-FCN架构:FCN32s、FCN16s、FCN8s模型对比分析
  • ops-cv 图像预处理加速:YOLO 推理前的最后一公里
  • 老板出幻觉了!过度相信 AI,迟早要暴雷…
  • 《Sysinternals实战指南》进程和诊断工具学习笔记(8.16):LiveKd 入门——在线内核调试,不重启不蓝屏
  • 杭州学书法艺考去哪家?2026杭州书法艺考机构推荐:杭州书法统考通过率高的机构+杭州师资力量强的书法培训机构 - 栗子测评
  • LicenseFinder扩展开发指南:如何为新的包管理器添加支持
  • Tunasync调度器工作原理:智能任务分配与并发控制完全指南
  • Spire扩展开发:如何为自定义数值类型实现代数接口
  • 测试工程师能力升级实战
  • CANN Runtime 异步任务调度:Stream 与 Event 的执行哲学
  • 杭州书法艺考机构哪家强?2026浙江书法联考培训机构推荐:杭州专业书法高考工作室+杭州口碑好书法高考培训机构合集 - 栗子测评
  • c#笔记之面向对象
  • ArduPilot SITL进阶:在Ubuntu 22.04上配置多旋翼/固定翼/小车模拟与自动化测试
  • Netcap 性能优化秘籍:7个技巧提升网络分析处理速度 [特殊字符]
  • git diff 从入门到精通
  • 为什么选择snnTorch?5个理由让你爱上这个脉冲神经网络框架
  • 别再瞎调PID了!手把手教你用STM32 HAL库搞定电机速度闭环(附完整代码)