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. 代码实现

java 复制代码
package lc2657;

import java.util.HashMap;

class Solution {
    public int[] findThePrefixCommonArray(int[] A, int[] B) {
        int n = A.length;
        int count = 0;
        int[] res = new int[n];
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 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;
        }
        return res;
    }
}

4. 代码优化说明

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

java 复制代码
class Solution {
public int[] findThePrefixCommonArray(int[] A, int[] B) {
int n = A.length;
int[] res = new int[n];
int[] count = new int[n + 1];
int common = 0;

        for (int i = 0; i < n; i++) {
            if (++count[A[i]] == 2) common++;
            if (++count[B[i]] == 2) common++;
            
            res[i] = common;
        }
        return res;
    }
}

5. 复杂度分析

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

6. 总结

  • 核心思路:计数统计 + 一次遍历
  • 关键:元素出现两次即为公共元素,直接计数即可。
  • 优化版用数组替代哈希表,速度更快、代码更短。
相关推荐
洛水水21 分钟前
【力扣100题】76.搜索插入位置
数据结构·算法·leetcode
Techblog of HaoWANG25 分钟前
智巡守卫:多模态巡检智能体算法服务端设计与实现——基于Ollama+Qwen3.5的自动化巡检报告生成系统
运维·人工智能·算法·目标检测·自动化·边缘计算
8Qi825 分钟前
Windows 系统Claude Code安装与使用笔记
windows·笔记·agent·claudecode
小蒋学算法35 分钟前
算法-灌溉花园的最少龙头数目-贪心
算法
满怀冰雪35 分钟前
第07篇-差分算法-高效处理区间修改问题
数据结构·算法
KaMeidebaby37 分钟前
卡梅德生物技术快报|重组蛋白的表达和纯化:工艺调试全记录:大肠杆菌体系重组蛋白的表达和纯化参数标定(肠激酶轻链案例)
前端·人工智能·算法·数据挖掘·数据分析
ZPC82101 小时前
如何将机械臂末端定位精度提升至微米如何进行标定
人工智能·算法·机器人
wabs6661 小时前
关于动态规划【力扣343.整数拆分的递推公式怎么理解?】
算法·leetcode·动态规划
测试狗科研平台1 小时前
第一性原理CO2还原反应计算流程和软件推荐
科技·算法·云计算
SEO_juper1 小时前
2026 谷歌 SEO&GEO 常见问题合集:收录、排名、内容、技术全解析
算法·谷歌·常见问题·seo·跨境电商·外贸·geo