,并且在 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整体分为两大轮遍历逻辑。第一轮遍历统计所有偶数的出现次数初始化空哈希映射cntkey存偶数数值value存该偶数出现次数。依次取出数组每一个元素逐个判断是否为偶数只对偶数做计数累加元素33÷2余1是奇数跳过不存入映射。元素44是偶数映射中无4cnt[4]赋值为1。此时映射{4:1}。元素22是偶数映射中无2cnt[2]赋值为1。此时映射{4:1, 2:1}。元素55÷2余1是奇数跳过。元素44是偶数映射已有4cnt[4]在原有基础上加1变为2。此时映射{4:2, 2:1}。元素66是偶数映射中无6cnt[6]赋值为1。最终完整映射{4:2, 2:1, 6:1}。第一轮遍历结束映射里保存了数组全部偶数各自出现的总次数奇数完全不参与统计。第二轮遍历按原数组顺序查找第一个仅出现1次的偶数再次从头到尾遍历原数组按元素原始先后顺序校验条件满足则直接返回不再继续遍历元素3奇数直接跳过不判断次数。元素4偶数去映射查cnt[4]2出现次数不为1不符合跳过。元素2偶数去映射查cnt[2]1同时满足两个条件偶数、仅出现一次符合题目要求。立刻终止本轮遍历直接把数字2作为函数结果返回后续元素5、4、6不再处理。main主函数流程定义输入数组nums [3,4,2,5,4,6]。调用firstUniqueEven函数传入数组接收返回结果2。打印输出结果2。边界补充逻辑无匹配偶数场景如果第二轮完整走完数组全程没有找到“偶数且次数为1”的数字函数最后执行return -1。二、复杂度分析设数组长度为 n题目约束1 ≤ n ≤ 1001. 时间复杂度第一轮遍历数组循环执行 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%20{cnt[x]}}for_,x:rangenums{ifx%20cnt[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%20:cnt[x]cnt.get(x,0)1forxinnums:ifx%20andcnt.get(x)1:returnxreturn-1if__name____main__:nums[3,4,2,5,4,6]resultfirst_unique_even(nums)print(result)C完整代码如下#includeiostream#includevector#includeunordered_mapintfirstUniqueEven(conststd::vectorintnums){std::unordered_mapint,intcnt;for(intx:nums){if(x%20){cnt[x];}}for(intx:nums){if(x%20cnt[x]1){returnx;}}return-1;}intmain(){std::vectorintnums{3,4,2,5,4,6};intresultfirstUniqueEven(nums);std::coutresultstd::endl;return0;}