2026-06-15:频率唯一的第一个元素。用go语言,从左到右扫描数组,统计每个元素出现的次数。对每个元素判断它的出现频率是否与其他元素不同:也就是它的出现次数在所有元素中是唯一的那种。找到最先满足

2026-06-15:频率唯一的第一个元素。用go语言,从左到右扫描数组,统计每个元素出现的次数。对每个元素判断它的出现频率是否与其他元素不同:也就是它的出现次数在所有元素中是唯一的那种。找到最先满足 2026-06-15频率唯一的第一个元素。用go语言从左到右扫描数组统计每个元素出现的次数。对每个元素判断它的出现频率是否与其他元素不同也就是它的出现次数在所有元素中是唯一的那种。找到最先满足这种“频率唯一”的元素并返回它如果没有任何元素满足条件则返回 -1。1 nums.length 100000。1 nums[i] 100000。输入 nums [20,10,30,30]。输出 30。解释20 出现了 1 次。10 出现了 1 次。30 出现了 2 次。30 的出现频率是唯一的因为没有其他整数恰好出现 2 次。题目来自力扣3843。一、整体解题分步详细过程步骤1遍历原数组统计每个数字的出现频次初始化一个键为数组元素、值为出现次数的哈希映射cnt用于记录每个数字出现多少次。从左到右完整遍历输入数组中每一个数字取出当前数字去哈希映射中查找该数字对应的计数若该数字第一次出现映射内默认计数为0执行计数1若已存在则直接在原有计数基础上1以示例输入[20,10,30,30]举例遍历完成后哈希映射存储结果20出现1次10出现1次30出现2次步骤2统计「频次的频次」记录每种出现次数有多少个数字创建数组cc数组长度等于原数组长度1。原因一个数字最多完整铺满整个数组最大出现次数不会超过原数组长度数组下标可以直接代表“出现次数”数组存储值代表“有多少个数字拥有该出现次数”。遍历上一步得到的频次哈希映射cnt的每一个计数值也就是各个数字的出现次数把当前计数值作为下标对应cc数组位置的值 1含义是拥有该出现次数的数字数量增加一个。示例遍历后cc数组关键位置结果下标1出现1次对应值为2代表有2个数字20、10只出现1次下标2出现2次对应值为1代表仅有1个数字30出现2次其余下标数值均为0。步骤3再次从左到右遍历原数组寻找第一个频率唯一的数字重新从头按顺序扫描原始输入数组保证满足“第一个”的要求对当前遍历到的数字先去哈希映射cnt取出它的出现次数用这个出现次数作为下标读取cc数组的值若读取结果等于1说明当前数字的出现次数是全局独一份没有其他数字和它出现次数相同符合题目要求立刻直接返回当前数字终止全部流程不再继续遍历示例逐元素校验过程第一个数字20出现次数1cc[1]2不等于1不满足第二个数字10出现次数1cc[1]2不等于1不满足第三个数字30出现次数2cc[2]1等于1满足条件直接返回30若完整遍历完整个数组所有数字的出现次数都存在重复所有cc[次数]1说明不存在频率唯一的元素最终返回-1。二、时间复杂度分析第一次遍历原数组统计频次数组长度为n时间复杂度O(n)O(n)O(n)遍历哈希映射统计频次的频次哈希映射中键的数量最多为n所有数字互不重复最坏时间复杂度O(n)O(n)O(n)第二次遍历原数组查找目标元素数组长度n时间复杂度O(n)O(n)O(n)三段操作依次串行执行相加后总时间复杂度O(n)O(n)O(n)。三、额外空间复杂度分析哈希映射cnt最坏情况所有数字不重复存储n个键值对占用O(n)O(n)O(n)数组cc长度固定为n1n1n1占用O(n)O(n)O(n)无其他随输入规模线性增长的临时存储总额外空间复杂度O(n)O(n)O(n)。Go完整代码如下packagemainimport(fmt)funcfirstUniqueFreq(nums[]int)int{cnt:map[int]int{}for_,x:rangenums{cnt[x]}cc:make([]int,len(nums)1)for_,c:rangecnt{cc[c]}for_,x:rangenums{ifcc[cnt[x]]1{returnx}}return-1}funcmain(){nums:[]int{20,10,30,30}result:firstUniqueFreq(nums)fmt.Println(result)}Python完整代码如下# -*-coding:utf-8-*-deffirst_unique_freq(nums):# Count frequency of each numbercnt{}forxinnums:cnt[x]cnt.get(x,0)1# Count how many numbers have each frequencycc[0]*(len(nums)1)forcincnt.values():cc[c]1# Find the first number whose frequency appears only onceforxinnums:ifcc[cnt[x]]1:returnxreturn-1defmain():nums[20,10,30,30]resultfirst_unique_freq(nums)print(result)if__name____main__:main()C完整代码如下#includeiostream#includevector#includeunordered_mapintfirstUniqueFreq(std::vectorintnums){std::unordered_mapint,intcnt;for(intx:nums){cnt[x];}std::vectorintcc(nums.size()1,0);for(constautopair:cnt){cc[pair.second];}for(intx:nums){if(cc[cnt[x]]1){returnx;}}return-1;}intmain(){std::vectorintnums{20,10,30,30};intresultfirstUniqueFreq(nums);std::coutresultstd::endl;return0;}