新闻详情

新闻详情

首页 / 资讯中心 / 详情

C# 未排序数组中第 k 个最小/最大元素 预期线性时间

发布时间:2026/9/1 20:37:43来源:尧图网络
C# 未排序数组中第 k 个最小/最大元素 预期线性时间
如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。未排序数组中第 k 个最小/最大元素 预期线性时间(K’th Smallest/Largest Element in Unsorted Array | Expected Linear Time)给定一个由不同整数组成的数组和一个整数 k其中 k 小于数组的大小任务是找到数组中第k小的元素。例如输入arr [7, 10, 4, 3, 20, 15] k 3输出7解释排序后的数组为 [3, 4, 7, 10, 15, 20]因此第三小的元素是 7。输入arr [7, 10, 4, 3, 20, 15] k 4输出10解释排序后的数组为 [3, 4, 7, 10, 15, 20]因此第 4 小的元素是 10。请注意解决“无序数组中最小/最大元素”问题有多种方法。本文讨论的方案在实践中效果最佳。无序数组中最小/最大元素C 第k个最小元素 C 第k个最小元素(K’th Smallest Element)-CSDN博客C# 第k个最小元素 C# 第k个最小元素(K’th Smallest Element)-CSDN博客Java 第k个最小元素 Java 第k个最小元素(K’th Smallest Element)-CSDN博客Python 第k个最小元素 Python 第k个最小元素(K’th Smallest Element)-CSDN博客JavaScript 第k个最小元素 JavaScript 第k个最小元素(K’th Smallest Element)-CSDN博客其思路是使用随机枢轴选择来划分数组通过专注于第 k 个元素所在的子数组来缩小搜索空间。循序渐进的方法随机选择枢轴元素随机选择一个元素作为枢轴元素。这有助于避免某些情况下的最坏情况例如数组已排序时。分区重新排列数组使所有小于枢轴元素的元素位于左侧所有大于枢轴元素的元素位于右侧。递归搜索枢轴元素确定位置后如果其索引与第 n 次比较相等则它是第 K 个大元素。否则根据与第 n 次-k 比较的结果递归地在相应的分区左侧或右侧中搜索-k。// C# program to find K’th Smallest/// Largest Element in Unsorted Arrayusing System;class GfG {// Partition function: Rearranges elements// around a pivot (last element)static int partition(int[] arr, int l, int r) {int x arr[r];int i l;// Iterate through the subarrayfor (int j l; j r - 1; j) {// Move elements pivot to the left partitionif (arr[j] x) {int temp arr[i];arr[i] arr[j];arr[j] temp;i;}}// Place the pivot in its correct positionint temp2 arr[i];arr[i] arr[r];arr[r] temp2;return i;}// Randomizes the pivot to avoid worst-case performancestatic int randomPartition(int[] arr, int l, int r) {Random rand new Random();int n r - l 1;int pivot rand.Next(n);int temp arr[l pivot];arr[l pivot] arr[r];arr[r] temp;return partition(arr, l, r);}// function to find the kth smallest element using QuickSelectstatic int quickSelect(int[] arr, int l, int r, int k) {// Check if k is within the valid range of the// current subarrayif (k 0 k r - l 1) {// Partition the array and get the pivots// final positionint pos randomPartition(arr, l, r);// If pivot is the kth element, return itif (pos - l k - 1)return arr[pos];// If pivots position is larger than k, search// left subarrayif (pos - l k - 1)return quickSelect(arr, l, pos - 1, k);// Otherwise, search right subarray and adjust k// (k is reduced by the size of the left partition)return quickSelect(arr, pos 1, r, k - (pos - l 1));}// Return infinity for invalid k (error handling)return int.MaxValue;}static int kthSmallest(int[] arr, int k) {int n arr.Length;return quickSelect(arr, 0, n - 1, k);}static void Main() {int[] arr {12, 3, 5, 7, 4, 19, 26};int k 3;Console.WriteLine(kthSmallest(arr, k));}}输出5时间复杂度O(n)。上述解决方案的最坏情况时间复杂度仍然是 O(n² )。在最坏情况下随机函数可能总是选择一个角点元素。然而平均情况时间复杂度为 O(n²) O(n)。分析中的假设是随机数生成器生成输入范围内任意数字的概率均等。辅助空间O(1)因为使用了常量变量。即使最坏情况下的时间复杂度是二次方的但这种解决方案在实践中效果最佳。如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

B站Android校招笔试题全解析:高频考点与避坑指南 2026/9/1 21:28:54

B站Android校招笔试题全解析:高频考点与避坑指南

2020年B站校园招聘这套Android笔试卷,到现在都有不少同学在翻,我见过好几个准备大厂校招的人拿它当模拟题练手。原因很简单:它考的东西覆盖面广、层次分明,既有基础原理的深度追问,也有工程实践的综合考察,…

阅读更多 →
B站2020校招后端笔试卷解析:考点、难度与避坑策略 2026/9/1 21:28:54

B站2020校招后端笔试卷解析:考点、难度与避坑策略

看到“哔哩哔哩2020校园招聘后端笔试卷(二)”这个标题,估计很多准备校招的同学第一反应是去牛客网翻面经、找原题。但说实话,光背题目没什么用,B站这类公司的笔试卷,每年题型都大同小异,核心考的…

阅读更多 →
B站2020后端笔试卷全解析:从Java基础到场景设计的考点拆解 2026/9/1 21:28:54

B站2020后端笔试卷全解析:从Java基础到场景设计的考点拆解

2020年那会儿,校招笔试还流行开摄像头做在线题。我当年刷到B站这套后端笔试卷(二)时,第一反应是“题量不小”,第二反应是“考察点很杂”。跟很多只堆八股的公司不一样,这套卷子把Java基础、并发、数据库、网…

阅读更多 →
能在 PC 上流畅运行 Switch 游戏吗?yuzu 模拟器安装、配置与调优完整指南 2026/9/1 21:28:54

能在 PC 上流畅运行 Switch 游戏吗?yuzu 模拟器安装、配置与调优完整指南

能在 PC 上流畅运行 Switch 游戏吗?yuzu 模拟器安装、配置与调优完整指南 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu 模拟器是一个用 C 编写的开源 Nintendo Switch 模拟器,由 Cit…

阅读更多 →
哔哩哔哩2020校招技术笔试复盘:算法与系统设计考点全解析 2026/9/1 21:28:54

哔哩哔哩2020校招技术笔试复盘:算法与系统设计考点全解析

2020年我参加过哔哩哔哩技术岗的校招笔试,二卷给我留下的印象比一卷深很多。这套卷子不是单纯筛知识量,而是在限时压力下看你能不能把基础问题答得干净、写得清楚。很多人以为校招笔试是玄学,其实它的命题脉络非常明确:算法题拉区…

阅读更多 →
LeetCode 908 最小差值 I:从极值调整到数学公式的算法思维 2026/9/1 21:25:53

LeetCode 908 最小差值 I:从极值调整到数学公式的算法思维

如果你在刷 LeetCode 时,看到“最小差值 I”这种题目,第一反应是不是觉得这题太简单,甚至有点“送分”的感觉?先别急着划走。这道力扣第 908 题,表面上是考察数组和简单数学运算,但它真正考验的&#xff0c…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞