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

2026-07-04:找到第一个唯一偶数。用go语言,在数组 nums 中寻找这样的数:它是偶数(能被 2 整除),并且在 nums 里只出现一次。请返回满足条件的那个偶数的值,并且以其在数组中的首次

2026-07-04:找到第一个唯一偶数。用go语言,在数组 nums 中寻找这样的数:它是偶数(能被 2 整除),并且在 nums 里只出现一次。请返回满足条件的那个偶数的值,并且以其在数组中的首次出现位置最靠前为准;如果数组中不存在这种偶数,返回 -1。

1 <= nums.length <= 100。

1 <= nums[i] <= 100。

输入: nums = [3,4,2,5,4,6]。

输出: 2。

解释:

2 和 6 都是偶数,并且它们都恰好出现一次。因为 2 在数组中出现得更早,所以答案是 2。

题目来自力扣3866。

一、函数执行分步详细过程(输入数组:[3,4,2,5,4,6])

函数目标:找出数组里第一个只出现一次的偶数,无符合条件数字返回-1,整体分为两大轮遍历逻辑。

第一轮遍历:统计所有偶数的出现次数

  1. 初始化空哈希映射cnt,key存偶数数值,value存该偶数出现次数。
  2. 依次取出数组每一个元素,逐个判断是否为偶数,只对偶数做计数累加:
    1. 元素3:3÷2余1,是奇数,跳过,不存入映射。
    2. 元素4:4是偶数,映射中无4,cnt[4]赋值为1。此时映射:{4:1}
    3. 元素2:2是偶数,映射中无2,cnt[2]赋值为1。此时映射:{4:1, 2:1}
    4. 元素5:5÷2余1,是奇数,跳过。
    5. 元素4:4是偶数,映射已有4,cnt[4]在原有基础上加1,变为2。此时映射:{4:2, 2:1}
    6. 元素6:6是偶数,映射中无6,cnt[6]赋值为1。最终完整映射:{4:2, 2:1, 6:1}
  3. 第一轮遍历结束,映射里保存了数组全部偶数各自出现的总次数,奇数完全不参与统计。

第二轮遍历:按原数组顺序查找第一个仅出现1次的偶数

再次从头到尾遍历原数组,按元素原始先后顺序校验条件,满足则直接返回,不再继续遍历:

  1. 元素3:奇数,直接跳过,不判断次数。
  2. 元素4:偶数,去映射查cnt[4]=2,出现次数不为1,不符合,跳过。
  3. 元素2:偶数,去映射查cnt[2]=1,同时满足两个条件:偶数、仅出现一次,符合题目要求。
  4. 立刻终止本轮遍历,直接把数字2作为函数结果返回,后续元素5、4、6不再处理。

main主函数流程

  1. 定义输入数组nums = [3,4,2,5,4,6]
  2. 调用firstUniqueEven函数,传入数组,接收返回结果2。
  3. 打印输出结果2。

边界补充逻辑(无匹配偶数场景)

如果第二轮完整走完数组,全程没有找到“偶数且次数为1”的数字,函数最后执行return -1

二、复杂度分析

设数组长度为 n(题目约束1 ≤ n ≤ 100)

1. 时间复杂度

  • 第一轮遍历数组:循环执行 n 次,O(n)
  • 第二轮遍历数组:最坏情况完整循环 n 次,O(n)
    两次线性遍历相加,总时间复杂度:O(n)

2. 额外空间复杂度

额外开辟了哈希映射存储偶数计数。数组元素取值范围1~100,偶数最多50个,映射存储元素数量固定有上限,和输入数组长度n无关。
因此总额外空间复杂度:O(1)(常数级空间)

Go完整代码如下:

packagemainimport("fmt")funcfirstUniqueEven(nums[]int)int{cnt:=map[int]int{}for_,x:=rangenums{ifx%2==0{cnt[x]++}}for_,x:=rangenums{ifx%2==0&&cnt[x]==1{returnx}}return-1}funcmain(){nums:=[]int{3,4,2,5,4,6}result:=firstUniqueEven(nums)fmt.Println(result)}

Python完整代码如下:

# -*-coding:utf-8-*-deffirst_unique_even(nums):cnt={}forxinnums:ifx%2==0:cnt[x]=cnt.get(x,0)+1forxinnums:ifx%2==0andcnt.get(x)==1:returnxreturn-1if__name__=="__main__":nums=[3,4,2,5,4,6]result=first_unique_even(nums)print(result)

C++完整代码如下:

#include<iostream>#include<vector>#include<unordered_map>intfirstUniqueEven(conststd::vector<int>&nums){std::unordered_map<int,int>cnt;for(intx:nums){if(x%2==0){cnt[x]++;}}for(intx:nums){if(x%2==0&&cnt[x]==1){returnx;}}return-1;}intmain(){std::vector<int>nums={3,4,2,5,4,6};intresult=firstUniqueEven(nums);std::cout<<result<<std::endl;return0;}

http://www.jsqmd.com/news/1128560/

相关文章:

  • DIFY-01:创建你的第一个对话助手
  • 国产模型顶配组合,OpenClaw 集成 DeepSeek V4 2026 实操指南
  • MC6470与STM32F423RH在6DOF运动控制中的优化实践
  • 终极指南:构建Apple Music级动态歌词体验的完整解决方案
  • Android图片解码器libjpeg-turbo vs Skia最佳实践
  • Windows 本地 AI 部署避坑指南,OpenClaw 2.7.9 完整落地操作记录
  • 使用SVN+CruiseControl+ANT实现持续集成之一
  • AI Box:智能汽车的“外挂大脑”与弹性进化之路
  • 设计 Token 审计:颜色统一不等于语义统一
  • 语法:变量
  • Windows EFS加密文件重装系统后恢复全攻略:原理、场景与实操
  • CompressO:5分钟学会用这款免费开源工具,将视频文件缩小90%
  • 数据自动刷新
  • 曹操出行全面转型AI原生公司,网约车生意不好了?
  • PoseCNN 与 YCB-Video 数据集实战:在 12 个测试视频上复现 6D 姿态评估
  • 【学习记录】Week12(一):House of Botcake——glibc 2.29+ 时代的堆重叠王者
  • 深度解析Rainmeter桌面自定义工具:从核心架构到插件开发实践
  • 在半导体功率循环测试中 反卷积是一种非常强大的信号处理技术
  • HCI 功能规范【5.1. Correctness】
  • 花3个月让AI首推,真实过程记录:剪流GEO能解决AI推荐竞品问题吗?
  • CodeCombat终极指南:如何通过游戏化学习掌握真实编程技能
  • 8、<简单>给你n个整数,将其逆序输出。
  • 3D 家居设计软件开发的费用
  • OpenClaw 接入 DeepSeek V4 实操教程|2026 最新参数配置与模型切换全解
  • 品牌出海数字资产怎么做?从搜索收录到海外AI推荐排名的GEO优化路径
  • 标称网格的地理经纬度
  • 如何在Windows上构建可靠的微信自动化工作流?
  • 如何高效修复Windows更新故障:Reset Windows Update Tool终极指南
  • 图吧工具箱+自动化:运维效率提升神器
  • 抖音无水印视频下载终极指南:三步搞定批量下载难题