首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >2026-07-04:找到第一个唯一偶数。用go语言,在数组 nums 中寻找这样的数:它是偶数(能被 2 整除),并且在 nums 里只出现一次。请返回

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

作者头像
福大大架构师每日一题
发布2026-07-06 18:10:31
发布2026-07-06 18:10:31
40
举报

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

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

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

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

main主函数流程

  1. 1. 定义输入数组 nums = [3,4,2,5,4,6]
  2. 2. 调用 firstUniqueEven 函数,传入数组,接收返回结果2。
  3. 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完整代码如下:

.

代码语言:javascript
复制
package main

import (
    "fmt"
)

func firstUniqueEven(nums []int)int {
    cnt := map[int]int{}
    for _, x := range nums {
        if x%2 == 0 {
            cnt[x]++
        }
    }

    for _, x := range nums {
        if x%2 == 0 && cnt[x] == 1 {
            return x
        }
    }
    return-1
}

func main() {
    nums := []int{3, 4, 2, 5, 4, 6}
    result := firstUniqueEven(nums)
    fmt.Println(result)
}
在这里插入图片描述
在这里插入图片描述

Python完整代码如下:

.

代码语言:javascript
复制
# -*-coding:utf-8-*-

def first_unique_even(nums):
    cnt = {}
    for x in nums:
        if x % 2 == 0:
            cnt[x] = cnt.get(x, 0) + 1

    for x in nums:
        if x % 2 == 0 and cnt.get(x) == 1:
            return x
    return-1


if __name__ == "__main__":
    nums = [3, 4, 2, 5, 4, 6]
    result = first_unique_even(nums)
    print(result)
在这里插入图片描述
在这里插入图片描述

C++完整代码如下:

.

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <unordered_map>

int firstUniqueEven(const std::vector<int>& nums) {
    std::unordered_map<int, int> cnt;
    for (int x : nums) {
        if (x % 2 == 0) {
            cnt[x]++;
        }
    }

    for (int x : nums) {
        if (x % 2 == 0 && cnt[x] == 1) {
            return x;
        }
    }
    return-1;
}

int main() {
    std::vector<int> nums = {3, 4, 2, 5, 4, 6};
    int result = firstUniqueEven(nums);
    std::cout << result << std::endl;
    return0;
}
在这里插入图片描述
在这里插入图片描述

·


我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

·

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、函数执行分步详细过程(输入数组:[3,4,2,5,4,6])
    • 第一轮遍历:统计所有偶数的出现次数
    • 第二轮遍历:按原数组顺序查找第一个仅出现1次的偶数
    • main主函数流程
    • 边界补充逻辑(无匹配偶数场景)
  • 二、复杂度分析
    • 1. 时间复杂度
    • 2. 额外空间复杂度
  • Go完整代码如下:
  • Python完整代码如下:
  • C++完整代码如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档