
2026-06-15:频率唯的个元素。用go谈话茂名钢绞线生产厂家,从左到右扫描数组,统计每个元素出现的次数。对每个元素判断它的出现频率是否与其他元素不同:也便是它的出现次数在统共元素中是唯的那种。找到先闲适这种“频率唯”的元素并复返它;淌若莫得任何元素闲适条目,则复返 -1。
1
1
输入: nums = [20,10,30,30]。
输出: 30。
讲明:
20 出现了 1 次。
10 出现了 1 次。
30 出现了 2 次。
30 的出现频率是唯的,因为莫得其他整数碰劲出现 2 次。
题目来独力扣3843。
、全体解题分步注释过程
顺序1:遍历原数组,统计每个数字的出现频次
1. 起始化个键为数组元素、值为出现次数的哈希映射 cnt,用于纪录每个数字出现若干次。
2. 从左到右完竣遍历输入数组中每个数字:
• 取出面前数字,去哈希映命中查找该数字对应的计数;
• 若该数字次出现,映射内默许计数为0,实验计数+1;若已存在则径直在原有计数基础上+1;
3. 以示例输入 [20,10,30,30] 例如,遍历完成后哈希映射存储效果:
• 20:出现1次
• 10:出现1次
• 30:出现2次
顺序2:统计「频次的频次」,纪录每种出现次数有若干个数字
1. 创建数组 cc,数组长度等于原数组长度+1。原因:个数字多完竣铺满通盘数组,大出现次数不会过原数组长度,数组下标不错径直代表“出现次数”,数组存储值代表“有若干个数字领有该出现次数”。
2. 遍历上步得到的频次哈希映射 cnt 的每个计数值(也便是各个数字的出现次数):
• 把面前计数值行为下标,对应 cc 数组位置的值 +1;含义是:领有该出现次数的数字数目增多个。
3. 示例遍历后 cc 数组关节位置效果:
• 下标1(出现1次):对应值为2,代表有2个数字(20、10)只出现1次;
• 下标2(出现2次):对应值为1,代表仅有1个数字(30)出现2次;
其余下标数值均为0。
顺序3:再次从左到右遍历原数组,寻找个频率唯的数字
1. 再行从新按规章扫描原始输入数组,保证闲适“个”的要求;
2. 对面前遍历到的数字,先去哈希映射 cnt 取出它的出现次数;
3. 用这个出现次数行为下标读取 cc 数组的值:
• 若读取效果等于1,证实面前数字的出现次数是全局份,莫得其他数字和它出现次数调换,符题目要求;
• 坐窝径直复返面前数字,拒绝一齐经过,不再链接遍历;
4. 示例逐元素校验过程:
• 个数字20:出现次数1,cc[1]=2,不等于1,预应力钢绞线不闲适;
• 二个数字10:出现次数1,cc[1]=2,不等于1,不闲适;
• 三个数字30:出现次数2,cc[2]=1,等于1,闲适条目,径直复返30;
5. 若完竣遍历完通盘数组,所罕有字的出现次数齐存在叠加(统共cc[次数]>1),证实不存在频率唯的元素,终复返-1。
二、本事复杂度分析
1. 次遍历原数组统计频次:数组长度为n,本事复杂度 ;
2. 遍历哈希映射统计频次的频次:哈希映命中键的数目多为n(所罕有字互不叠加),坏本事复杂度 ;
3. 二次遍历原数组查找宗旨元素:数组长度n茂名钢绞线生产厂家,本事复杂度 ;
三段操作治安串行实验,相加后总本事复杂度:。
三、异常空间复杂度分析
1. 哈希映射cnt:坏情况所罕有字不叠加,存储n个键值对,占用 ;
2. 数组cc:长度固定为 ,占用 ;
其他随输入限度线增长的临时存储,总数外空间复杂度:。
Go完竣代码如下:
package main
import (
"fmt"
)
func firstUniqueFreq(nums []int)int {
cnt := map[int]int{}
for _, x := range nums {
cnt[x]++
}
cc := make([]int, len(nums)+1)
for _, c := range cnt {
cc[c]++
}
for _, x := range nums {
if cc[cnt[x]] == 1 {
return x
}
}
return-1
}
func main {
nums := []int{20, 10, 30, 30}
result := firstUniqueFreq(nums)
fmt.Println(result)
}
Python完竣代码如下:
# -*-coding:utf-8-*-
def first_unique_freq(nums):
# Count frequency of each number
cnt = {}
for x in nums:
cnt[x] = cnt.get(x, 0) + 1
# Count how many numbers have each frequency
cc = [0] * (len(nums) + 1)
for c in cnt.values:
cc[c] += 1
# Find the first number whose frequency appears only once
for x in nums:
if cc[cnt[x]] == 1:
return x
return-1
def main:
nums = [20, 10, 30, 30]
result = first_unique_freq(nums)
print(result)
if __name__ == "__main__":
main
C++完竣代码如下:
#include
#include
#include
int firstUniqueFreq(std::vector& nums) {
std::unordered_map cnt;
for (int x : nums) {
cnt[x]++;
}
std::vector cc(nums.size + 1, 0);
for (const auto& pair : cnt) {
cc[pair.second]++;
}
for (int x : nums) {
if (cc[cnt[x]] == 1) {
return x;
}
}
return-1;
}
int main {
std::vector nums = {20, 10, 30, 30};
int result = firstUniqueFreq(nums);
std::cout
return0;
}
咱们服气东谈主工智能为平日东谈主提供了种“增强用具”,并发奋于共享全位的AI常识。在这里,您不错找到新的AI科普著作、用具评测、莳植率的秘密以及行业细察。
迎接温雅“福大大架构师逐日题”,发音信可取得口试贵寓,让AI助力您的过去发展。手机号码:13302071130相关词条:罐体保温 塑料挤出设备 钢绞线 超细玻璃棉板 万能胶
1.本网站以及本平台支持关于《新广告法》实施的“极限词“用语属“违词”的规定,并在网站的各个栏目、产品主图、详情页等描述中规避“违禁词”。
2.本店欢迎所有用户指出有“违禁词”“广告法”出现的地方,并积极配合修改。
3.凡用户访问本网页,均表示默认详情页的描述,不支持任何以极限化“违禁词”“广告法”为借口理由投诉违反《新广告法》,以此来变相勒索商家索要赔偿的违法恶意行为。