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

2026-06-22:不同频率的最小数对。用go语言,给定一个整数数组 nums,你需要从中找到两个不同的数 x 和 y,要求 x 比 y 小,而且它们在数组里出现的次数不一样。 在所有符合条件的组合

2026-06-22:不同频率的最小数对。用go语言,给定一个整数数组 nums,你需要从中找到两个不同的数 x 和 y,要求 x 比 y 小,而且它们在数组里出现的次数不一样。

在所有符合条件的组合里,先优先选择 x 尽可能小的那一组;如果有多组的 x 一样,再选择 y 尽可能小的那一组。

最后返回这两个数组成的数组 [x, y]。

如果根本找不到这样的两个数,就返回 [-1, -1]。

1 <= nums.length <= 100。

1 <= nums[i] <= 100。

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

输出: [1,3]。

解释:

最小的值是 1,频率为 2。比 1 大且频率与 1 不同的最小值是 3,其频率为 1。因此,答案是 [1, 3]。

题目来自力扣3852。

一、代码完整分步执行过程

步骤1:遍历原数组,统计数字频次、记录全局最小值x候选

  1. 初始化空哈希映射cnt,作用:key=数组数字,value=该数字出现次数;
  2. 初始化变量mn(用来存全局最小数字),赋值为整型最大值,保证任意数组数字都能覆盖它;
  3. 逐个取出数组中每一个元素 x:
    • 将该数字在映射表中的计数 +1,完成频次统计;
    • 对比当前元素和mn,如果当前数字更小,就更新mn
  4. 遍历结束后得到两个关键信息:
    • cnt:完整记录数组所有不重复数字的出现次数;
    • mn:整个数组里数值最小的数字,也就是我们第一优先级要选的 x;
  5. 取出mn对应的出现次数,存入变量cntMin,即目标 x 的频次。

以示例[1,1,2,2,3,4]举例:

  • 频次映射结果:1:2,2:2,3:1,4:1;
  • 全局最小数字mn = 1cntMin = 2

步骤2:遍历频次映射,寻找满足条件的最小y

要求 y 满足两点:① y 的出现次数不等于cntMin;② 后续要保证y > mn

  1. 初始化变量minY(存储符合频次条件的最小数字),赋值整型最大值;
  2. 遍历频次映射里每一组(数字y,对应频次c):
    • 判断:如果当前数字的频次 c ≠ cntMin(和x频次不一样);
    • 满足频次条件时,对比当前y和minY,若y更小,更新minY
  3. 本轮遍历结束后,minY全数组中频次和x不相等的所有数字里数值最小的那一个

示例遍历过程:

  • y=1,频次2 == cntMin(2),跳过;
  • y=2,频次2 == cntMin(2),跳过;
  • y=3,频次1 ≠ 2,minY更新为3;
  • y=4,频次1 ≠ 2,4比3大,不更新minY;
    最终minY = 3

步骤3:合法性校验,构造返回结果

  1. 判断minY是否仍等于初始的整型最大值:
    • 等于:代表数组里所有数字的出现频次全部相同,不存在符合要求的数对,返回[-1, -1]
    • 不等于:存在合法y,此时mn < minY天然成立(因为mn是全局最小数字,minY是另一个不同数字),直接返回数组[mn, minY]

示例中 minY=3 有效,返回[1, 3],和题目输出一致。

边界场景补充逻辑

场景:数组所有数字频次完全一致,例如[5,5,6,6,7,7]

  • mn=5,cntMin=2;
  • 遍历所有y:5、6、7频次全是2,minY保持最大值;
  • 判定无合法数对,返回[-1,-1]

二、时间复杂度分析

设数组长度为 n,数组中不重复数字的数量为 k(k ≤ n)。

  1. 第一次遍历原数组:循环 n 次,单次哈希读写为 O(1),耗时 O(n);
  2. 第二次遍历频次哈希表:循环 k 次,k最大等于n,耗时 O(n);
    总操作:两段线性遍历,无嵌套循环。
    总时间复杂度:O(n)

三、额外空间复杂度分析

额外开辟的存储空间只有哈希映射cnt,最多存储 k 个键值对,k ≤ n;
其余变量(mn、cntMin、minY)均为常数级固定空间,不随数组长度变化。
总额外空间复杂度:O(n)
(最坏情况数组所有数字互不重复,哈希表存储n组数据)

Go完整代码如下:

packagemainimport("fmt""math")funcminDistinctFreqPair(nums[]int)[]int{cnt:=map[int]int{}mn:=math.MaxIntfor_,x:=rangenums{cnt[x]++mn=min(mn,x)}cntMin:=cnt[mn]minY:=math.MaxIntfory,c:=rangecnt{ifc!=cntMin{minY=min(minY,y)}}ifminY==math.MaxInt{return[]int{-1,-1}}return[]int{mn,minY}}funcmain(){nums:=[]int{1,1,2,2,3,4}result:=minDistinctFreqPair(nums)fmt.Println(result)}

Python完整代码如下:

# -*-coding:utf-8-*-fromtypingimportListimportmathdefmin_distinct_freq_pair(nums:List[int])->List[int]:# 统计频次cnt={}mn=math.infforxinnums:cnt[x]=cnt.get(x,0)+1mn=min(mn,x)# 获取最小值的频次cnt_min=cnt[mn]# 找到频次不等于 cnt_min 的最小值min_y=math.inffory,cincnt.items():ifc!=cnt_min:min_y=min(min_y,y)# 如果没找到,返回 [-1, -1]ifmin_y==math.inf:return[-1,-1]return[mn,min_y]defmain():nums=[1,1,2,2,3,4]result=min_distinct_freq_pair(nums)print(result)if__name__=="__main__":main()

C++完整代码如下:

#include<iostream>#include<vector>#include<unordered_map>#include<climits>usingnamespacestd;vector<int>minDistinctFreqPair(vector<int>&nums){unordered_map<int,int>cnt;intmn=INT_MAX;for(intx:nums){cnt[x]++;mn=min(mn,x);}intcntMin=cnt[mn];intminY=INT_MAX;for(auto&p:cnt){inty=p.first;intc=p.second;if(c!=cntMin){minY=min(minY,y);}}if(minY==INT_MAX){return{-1,-1};}return{mn,minY};}intmain(){vector<int>nums={1,1,2,2,3,4};vector<int>result=minDistinctFreqPair(nums);cout<<"["<<result[0]<<", "<<result[1]<<"]"<<endl;return0;}

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

相关文章:

  • 常宁市2026年本地黄金回收靠谱门店 白银回收+铂金回收优选门店汇总及电话地址指南TOP5排行榜推荐 - 大熊猫898989
  • Claude code 安装配置全流程(接入Deepseek API)
  • 淮南市2026年本地黄金回收+白银回收+铂金回收实力门店TOP5排行榜 K金+金条+银条回收及电话地址推荐 - 盛世金银回收
  • 贵阳市2026年本地黄金回收靠谱门店 白银回收+铂金回收优选门店汇总及电话地址指南TOP5排行榜推荐 - 大熊猫898989
  • 东莞市2026年本地黄金回收+白银回收+铂金回收实力门店TOP5排行榜 K金+金条+银条回收及电话地址推荐 - 盛世金银回收
  • Gemini 3.1 Pro工程实践:100万token与customtools端点深度解析
  • 2025大语言模型生产实践:从推理优化到GRPO对齐的全栈落地
  • 指纹浏览器指纹工厂(上):自动化生成与维护千万级纯净指纹库的算法设计
  • DLSS Swapper完全指南:如何一键优化NVIDIA显卡游戏性能
  • 本溪市2026年本地黄金回收+白银回收+铂金回收实力门店TOP5排行榜 K金+金条+银条回收及电话地址推荐 - 盛世金银回收
  • 鸡西市2026年本地黄金回收靠谱门店 白银回收+铂金回收优选门店汇总及电话地址指南TOP5排行榜推荐 - 大熊猫898989
  • 多个html如何拼接_多个HTML文件合并(工具/代码)方法
  • 东营市2026年本地黄金回收靠谱门店 白银回收+铂金回收优选门店汇总及电话地址指南TOP5排行榜推荐 - 大熊猫898989
  • 广德市2026年本地黄金回收+白银回收+铂金回收实力门店TOP5排行榜 K金+金条+银条回收及电话地址推荐 - 盛世金银回收
  • 18 Milvus-Milvus集群部署
  • OpenClaw对接飞书:AI工作流集成的权限、协议与生产实践
  • Day4 JVM内存模型:一篇文章搞定堆栈方法区的关系
  • 桂林市2026年本地黄金回收靠谱门店 白银回收+铂金回收优选门店汇总及电话地址指南TOP5排行榜推荐 - 大熊猫898989
  • 口碑好的数控弯管机一站式供应商、源头厂家、服务商家介绍 - mypinpai
  • 常熟市2026年本地黄金回收靠谱门店 白银回收+铂金回收优选门店汇总及电话地址指南TOP5排行榜推荐 - 大熊猫898989
  • 吉安市2026年本地黄金回收靠谱门店 白银回收+铂金回收优选门店汇总及电话地址指南TOP5排行榜推荐 - 大熊猫898989
  • 东宁市2026年本地黄金回收+白银回收+铂金回收实力门店TOP5排行榜 K金+金条+银条回收及电话地址推荐 - 盛世金银回收
  • OpenClaw 2.7.9 评测报告:本地运行、零配置、双平台支持
  • Qwable-v1 模型详解 —— 链式蒸馏打造开源智能体编程模型
  • 毕节市2026年本地黄金回收+白银回收+铂金回收实力门店TOP5排行榜 K金+金条+银条回收及电话地址推荐 - 盛世金银回收
  • DeepSeek V4 + Cherry Studio 构建可落地的AI Agent工作流
  • 锐捷BGP等价路由组网
  • 性价比高的数控弯管机推荐,伟博机械优势尽显 - mypinpai
  • 分布式一致性困局:从 Raft 协议到工程落地的深度剖析
  • 别再让你的代码吃灰了!AI时代,小白也能一键部署并躺着赚钱(附保姆级教程)