news 2026/6/9 22:43:57

算法题 在长度 2N 的数组中找出重复 N 次的元素

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法题 在长度 2N 的数组中找出重复 N 次的元素

在长度 2N 的数组中找出重复 N 次的元素

问题描述

给定一个整数数组nums,其长度为2N。数组中恰好有一个元素重复了N次,其余N个元素都是唯一的。请返回重复了N次的元素。

约束条件

  • 2 <= nums.length <= 10000
  • nums.length是偶数
  • 0 <= nums[i] < 10000
  • 数组中恰好有一个元素重复了N

示例

输入: [1,2,3,3] 输出: 3 解释: 数组长度为4 (2N=4, N=2),元素3重复了2次。 输入: [2,1,2,5,3,2] 输出: 2 解释: 数组长度为6 (2N=6, N=3),元素2重复了3次。 输入: [5,1,5,2,5,3,5,4] 输出: 5 解释: 数组长度为8 (2N=8, N=4),元素5重复了4次。

算法思路

方法一:哈希表计数

使用哈希表统计每个元素的出现次数,找到出现次数为N的元素。

方法二:数学

由于数组长度为2N,有一个元素出现N次,其余N个元素各出现 1 次。重复元素占据了数组的一半。

代码实现

方法一:哈希表计数

importjava.util.*;classSolution{/** * 使用哈希表统计元素频次,找到重复N次的元素 * * @param nums 长度为2N的整数数组 * @return 重复了N次的元素 */publicintrepeatedNTimes(int[]nums){Map<Integer,Integer>count=newHashMap<>();intn=nums.length/2;// 重复次数for(intnum:nums){count.put(num,count.getOrDefault(num,0)+1);// 一旦发现某个元素出现次数达到n,立即返回if(count.get(num)==n){returnnum;}}return-1;}}

方法二:间隔

classSolution{/** * 重复元素间隔不超过2 * * @param nums 长度为2N的整数数组 * @return 重复了N次的元素 */publicintrepeatedNTimes(int[]nums){// 检查所有间隔为1的相邻元素对for(inti=0;i<nums.length-1;i++){if(nums[i]==nums[i+1]){returnnums[i];}}// 检查所有间隔为2的元素对for(inti=0;i<nums.length-2;i++){if(nums[i]==nums[i+2]){returnnums[i];}}// 检查所有间隔为3的元素对(只在小数组中需要)for(inti=0;i<nums.length-3;i++){if(nums[i]==nums[i+3]){returnnums[i];}}// 对于长度为4的特殊情况,检查首尾元素returnnums[0];}}

算法分析

方法一:哈希表计数

  • 时间复杂度:O(N)
    • 最坏情况下需要遍历整个数组
    • 平均情况下可能提前找到答案
  • 空间复杂度:O(N)
    • 哈希表最多存储 N+1 个不同元素

方法二:间隔

  • 时间复杂度:O(N)
    • 只需要三次线性扫描
  • 空间复杂度:O(1)
    • 只使用常数额外空间

算法过程

输入[5,1,5,2,5,3,5,4](N=4):

方法一:

  1. 统计频次:5→1, 1→1, 5→2, 2→1, 5→3, 3→1, 5→4
  2. 当 5 的计数达到 4 时,立即返回 5

方法二:

  1. 检查相邻元素:5≠1, 1≠5, 5≠2, 2≠5, 5≠3, 3≠5, 5≠4 → 无匹配
  2. 检查间隔为2的元素:5==5(索引0和2)→ 返回 5

测试用例

publicclassTestRepeatedNTimes{publicstaticvoidmain(String[]args){Solutionsolution=newSolution();// 测试用例1:基本示例int[]nums1={1,2,3,3};System.out.println("Test 1: "+solution.repeatedNTimes(nums1));// 3// 测试用例2:N=3的情况int[]nums2={2,1,2,5,3,2};System.out.println("Test 2: "+solution.repeatedNTimes(nums2));// 2// 测试用例3:N=4的情况int[]nums3={5,1,5,2,5,3,5,4};System.out.println("Test 3: "+solution.repeatedNTimes(nums3));// 5// 测试用例4:相邻重复int[]nums4={1,1,2,3};System.out.println("Test 4: "+solution.repeatedNTimes(nums4));// 1// 测试用例5:间隔为2的重复int[]nums5={1,2,1,3};System.out.println("Test 5: "+solution.repeatedNTimes(nums5));// 1// 测试用例6:最大规模int[]nums6=newint[10000];for(inti=0;i<5000;i++){nums6[i]=9999;// 重复5000次}for(inti=5000;i<10000;i++){nums6[i]=i-5000;// 其他唯一元素}System.out.println("Test 6: "+solution.repeatedNTimes(nums6));// 9999}}

关键点

  1. 问题

    • 重复元素占数组一半
  2. 间隔

    • 重复元素无法完全均匀分散
    • 必然存在两个重复元素的距离不超过 2

常见问题

  1. 为什么方法二中只需要检查间隔1、2、3?
    • 通过鸽巢原理可以证明,在 2N 长度的数组中放置 N 个相同元素,必然存在两个相同元素的距离 ≤ 3。
    • 对于 N≥3,距离 ≤ 2 就足够了。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 16:30:57

FSMN-VAD工具推荐:支持麦克风实时检测的Web方案

FSMN-VAD工具推荐&#xff1a;支持麦克风实时检测的Web方案 1. FSMN-VAD 离线语音端点检测控制台 你是否在处理长段录音时&#xff0c;为手动切分有效语音而头疼&#xff1f;有没有一种方法能自动识别出“哪里有人说话”&#xff0c;并精准标注时间范围&#xff1f;答案是肯定…

作者头像 李华
网站建设 2026/6/9 1:09:56

OpenCV 算子速查手册(覆盖99%的OpenCV开发需求)

OpenCV 算子速查手册&#xff08;按应用场景分类&#xff09; 本手册按计算机视觉实际开发高频场景分类&#xff0c;每个场景划分核心算子&#xff08;实现场景核心功能的必备算子&#xff09;和辅助算子&#xff08;配合核心算子做预处理/后处理/优化&#xff09;&#xff0c;…

作者头像 李华
网站建设 2026/6/6 21:31:16

《2026企业必争:AI搜索优化+GEO监测工具免费开放

2026年开年&#xff0c;AI搜索已彻底改变人们获取信息的方式。QuestMobile最新数据显示&#xff0c;国内AI助手月活用户突破4.5亿&#xff0c;超六成用户会根据AI推荐做出消费决策。然而&#xff0c;一个严峻的事实摆在眼前&#xff1a;超七成企业不清楚AI如何描述自家品牌&…

作者头像 李华
网站建设 2026/6/6 21:25:02

液体冷却工作原理、系统组件及其仿真分析

&#x1f393;作者简介&#xff1a;科技自媒体优质创作者 &#x1f310;个人主页&#xff1a;莱歌数字-CSDN博客 &#x1f48c;公众号&#xff1a;莱歌数字&#xff08;B站同名&#xff09; &#x1f4f1;个人微信&#xff1a;yanshanYH 211、985硕士&#xff0c;从业16年 从…

作者头像 李华
网站建设 2026/6/6 21:09:24

Glyph语音转写可视化:声谱图推理部署实战

Glyph语音转写可视化&#xff1a;声谱图推理部署实战 1. Glyph是什么&#xff1f;用图像处理长文本的新思路 你有没有遇到过这样的问题&#xff1a;一段长达几万字的会议录音转写稿&#xff0c;光是加载就卡得不行&#xff0c;更别提让大模型去分析总结了&#xff1f;传统语言…

作者头像 李华
网站建设 2026/6/9 22:26:18

3款视觉大模型工具推荐:Glyph免配置镜像部署快速体验

3款视觉大模型工具推荐&#xff1a;Glyph免配置镜像部署快速体验 你是否还在为复杂的视觉大模型部署流程头疼&#xff1f;环境依赖多、配置繁琐、显存要求高&#xff0c;动辄几个小时的调试时间让人望而却步。今天给大家带来三款真正“开箱即用”的视觉大模型工具&#xff0c;…

作者头像 李华