news 2026/9/16 9:50:49

算法题 在长度 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/9/16 6:21:47

代驾系统源码 + 同城代驾平台开发:企业级一站式解决方案解析

近几年&#xff0c;代驾行业正在悄然发生变化。从最早的“酒后代驾”&#xff0c;到如今覆盖商务出行、长途代驾、同城即时服务&#xff0c;代驾已经不再只是一个“补充型服务”&#xff0c;而是逐渐演变成一个高频、刚需、可规模化的平台型业务。也正因如此&#xff0c;越来越…

作者头像 李华
网站建设 2026/9/16 5:44:57

Paraformer-large用户权限控制:不同角色访问限制实现

Paraformer-large用户权限控制&#xff1a;不同角色访问限制实现 1. 背景与需求分析 在实际部署语音识别服务时&#xff0c;我们常常面临一个现实问题&#xff1a;如何让同一个系统服务于不同类型的用户&#xff0c;同时保障数据安全和功能隔离&#xff1f;比如企业内部可能有…

作者头像 李华
网站建设 2026/9/12 0:31:33

2026年AI图像生成趋势:开源人像卡通化模型实战入门必看

2026年AI图像生成趋势&#xff1a;开源人像卡通化模型实战入门必看 近年来&#xff0c;AI图像生成技术正以前所未有的速度演进。在众多细分方向中&#xff0c;人像卡通化因其广泛的应用场景——从社交头像、数字人设想到个性化内容创作——成为开发者和创作者关注的焦点。2026…

作者头像 李华
网站建设 2026/9/9 10:46:20

互联网医院如何通过企业服务盈利?

今天我们来聊聊一个挺有意思的话题&#xff1a;互联网医院除了给咱们普通人看病&#xff0c;怎么赚企业的钱&#xff1f;说白了&#xff0c;就是它们的“企业服务”盈利模式。你可能发现了&#xff0c;现在越来越多的公司开始操心员工健康&#xff0c;这恰恰成了互联网医院的一…

作者头像 李华
网站建设 2026/9/4 0:15:44

为什么企业照着 ITIL 做流程,IT 却依然忙乱低效?

一、ITIL 被误解最多的一点&#xff1a;它不是“照抄流程表”在很多企业里&#xff0c;ITIL 给人的第一印象往往并不友好&#xff1a; 流程多、概念多、文档多、看起来很“重”。 不少 IT 人都有过类似体验——学了 ITIL、照着流程图做了&#xff0c;结果发现实际工作反而更复杂…

作者头像 李华
网站建设 2026/9/5 14:04:50

unet人像卡通化保姆级教程:从零开始部署AI绘画工具

unet人像卡通化保姆级教程&#xff1a;从零开始部署AI绘画工具 你是不是也经常在社交平台上看到那些把真人照片变成动漫角色的效果&#xff1f;看起来像是专业画师手绘的卡通头像&#xff0c;其实背后是AI在悄悄工作。今天我要带你亲手搭建一个人像卡通化工具&#xff0c;用的…

作者头像 李华