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

2026-04-12:统计合格元素的数目。用go语言,给定一个长度为 n 的整数数组 nums,以及一个整数 k。 我们把数组中的某个元素记为“合格”,当且仅当:在数组中比它大的元素数量不少于 k 个

2026-04-12:统计合格元素的数目。用go语言,给定一个长度为 n 的整数数组 nums,以及一个整数 k。

我们把数组中的某个元素记为“合格”,当且仅当:在数组中比它大的元素数量不少于 k 个(也就是严格大于该元素的数至少有 k 个)。

请统计并返回数组里所有“合格”元素的数量。

1 <= n == nums.length <= 100000。

1 <= nums[i] <= 1000000000。

0 <= k < n。

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

输出: 2。

解释:

元素 1 和 2 均有至少 k = 1 个元素大于它们。

没有元素比 3 更大。因此答案是 2。

代码执行过程详细分步描述

第一步:处理特殊边界条件

代码首先判断k是否等于 0:

  • 题目中k=1,不满足k==0,跳过该分支;
  • 这个分支的作用是:如果k=0,所有元素都满足「严格大于它的数至少0个」,直接返回数组总长度即可。

第二步:对数组进行升序排序

代码调用排序函数对原数组升序排列

  • 原数组:[3, 1, 2]
  • 排序后数组:[1, 2, 3]
  • 排序的目的:方便快速找到「第k大的元素」,进而判断哪些元素是合格元素。

第三步:定位「第k大的元素」

  1. 先计算数组长度n=3
  2. 第k大的元素,在升序排序后的数组中,位置是n-k(索引从0开始);
  3. 代入计算:n-k = 3-1 = 2,即排序后数组索引为2的元素;
  4. 排序数组[1,2,3]索引2的元素是3,这就是第1大的元素

第四步:统计「合格元素」的数量

题目定义:严格大于该元素的数至少有k个 → 该元素为合格元素

  • 升序排序后,所有小于「第k大元素」的数,都满足「至少有k个元素比它大」;
  • 代码通过查找函数,统计排序数组中小于「第k大元素(3)」的元素个数
  • 排序数组[1,2,3]中小于3的元素是1、2,总数量为2;

第五步:返回结果并输出

将统计的数量2作为结果返回,最终输出结果为2,与题目要求一致。


时间复杂度与额外空间复杂度分析

1. 总时间复杂度

代码的核心操作分为两部分:

  1. 数组排序:Go 语言内置的排序算法时间复杂度为O(n log n)(n是数组长度);
  2. 查找元素个数sort.SearchInts是二分查找,时间复杂度为O(log n)
  3. 其他操作(赋值、判断)都是常数时间 O(1)。

总时间复杂度由最高量级的操作决定,因此:
总时间复杂度:O(n log n)

2. 总额外空间复杂度

额外空间指:除了输入数组本身外,代码执行过程中额外开辟的内存空间

  • 排序操作:Go 语言的切片排序是原地排序,仅使用常数级的临时变量,不额外开辟数组空间;
  • 代码中仅定义了nresult等几个变量,占用空间与数组长度n无关;

总额外空间复杂度:O(1)(常数级空间)


总结

  1. 执行核心流程:判断k=0→数组升序排序→找到第k大元素→统计小于该元素的数量→返回结果;
  2. 时间复杂度:O(n log n)(主要耗时在排序);
  3. 额外空间复杂度:O(1)(原地操作,无额外大空间开销)。

Go完整代码如下:

packagemainimport("fmt""slices""sort")funccountElements(nums[]int,kint)int{n:=len(nums)ifk==0{returnn}slices.Sort(nums)returnsort.SearchInts(nums,nums[n-k])// 小于第 k 大的元素个数}funcmain(){nums:=[]int{3,1,2}k:=1result:=countElements(nums,k)fmt.Println(result)}

Python完整代码如下:

# -*-coding:utf-8-*-frombisectimportbisect_rightfromtypingimportListdefcount_elements(nums:List[int],k:int)->int:n=len(nums)ifk==0:returnn nums.sort()# bisect_right returns the index where to insert to keep sorted order,# which gives the count of elements <= target# Here we want the number of elements < the k-th largest element# The k-th largest element is at index n-ktarget=nums[n-k]returnbisect_right(nums,target-1)defmain():nums=[3,1,2]k=1result=count_elements(nums,k)print(result)if__name__=="__main__":main()

C++完整代码如下:

#include<iostream>#include<vector>#include<algorithm>intcountElements(std::vector<int>&nums,intk){intn=nums.size();if(k==0){returnn;}std::sort(nums.begin(),nums.end());// Get the k-th largest elementintkth_largest=nums[n-k];// Count elements strictly less than kth_largestintcount=0;for(intnum:nums){if(num<kth_largest){count++;}else{break;// Since array is sorted, we can break early}}returncount;}intmain(){std::vector<int>nums={3,1,2};intk=1;intresult=countElements(nums,k);std::cout<<result<<std::endl;return0;}

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

相关文章:

  • YOLOv8与OFA模型联用:智能图像分析与描述系统
  • cv_resnet101_face-detection_cvpr22papermogface 内网穿透:将本地部署的模型服务暴露到公网供外部调用
  • 02华夏之光永存:黄大年茶思屋榜文解法「难题揭榜第4期-第2题」
  • SiameseUIE惊艳案例:现代人名+行政区划名称高精度匹配
  • 5个技巧掌握Display Driver Uninstaller:Windows显卡驱动彻底清理终极指南
  • CasRel关系抽取模型从零开始:基于HuggingFace Transformers重训微调流程
  • 墨语灵犀Keil5开发环境问题排查指南:编译错误与调试技巧
  • 如何快速解密网易云音乐NCM文件:完整ncmdump转换指南
  • OpenCode实战案例:用AI编程助手快速开发项目,提升10倍编码效率
  • Qwen2.5-VL-7B-Instruct实现智能应用控件自动化:实战部署指南
  • TranslucentTB开机启动终极指南:3步解决透明任务栏自启动难题
  • Qwen3-4B Instruct-2507快速部署:HuggingFace Transformers直连调用教程
  • Pixel Aurora Engine 后端开发实战:构建高可用AI绘画API网关
  • FaceFusion错误排查大全:从CUDA配置到ffmpeg编码的解决方案
  • QMCDecode:轻松解锁QQ音乐加密格式的macOS利器
  • Display Driver Uninstaller深度技术解析:彻底解决Windows显卡驱动残留问题
  • 2026模型构建找哪家?一站式动物实验服务机构推荐 - 品牌排行榜
  • 哔哩下载姬DownKyi:5分钟快速上手指南,解锁B站视频下载全功能
  • 霜儿-汉服-造相Z-Turbo开发者案例:基于LoRA的垂直领域文生图轻量化实践
  • Qwen3-ForcedAligner-0.6B案例集:嘈杂环境录音(咖啡馆)识别效果与时间戳鲁棒性
  • QQ音乐解码神器qmcdump:终极完整教程,一键解锁加密音乐文件
  • Dell G15散热控制终极指南:开源tcc-g15让你轻松掌控笔记本温度
  • Hunyuan-MT-7B优化升级:FP8量化版在RTX 4080上的性能实测
  • SpringBoot项目迁移到TongWeb实战:从Tomcat切换到国产中间件的完整指南
  • 2026年做动物实验的CRO公司服务与选择参考 - 品牌排行榜
  • S2-Pro:从YOLOv11物体检测结果生成详细描述报告
  • CoPaw提示词(Prompt)工程高级指南:从基础到专家技巧
  • VSCode更新后SSH连接报错?手把手教你解决‘Acquiring lock‘和‘管道不存在‘问题
  • 中科番茄红素胶囊和软胶囊区别解析(2026最新对比) - 品牌排行榜
  • Ollama部署Qwen2.5-VL-7B:快速体验AI看图说话和视频理解