当前位置: 首页 > 编程语言 > C#

如何在VisualC#中获取数组中第二大的数字?Share

时间:2023-04-10 14:38:03 C#

如何在VisualC#中获取数组中第二大的数字?我有一系列整数。我想获得该数组中第二大的数字。有捷径吗?试试这个(使用LINQ):intsecondHighest=(fromnumberinnumbersorderbynumberdescendingselectnumber).Skip(1).First();您可以对数组进行排序并选择第二个索引处的项目,但低于O(n)循环会快得多。int[]myArray=newint[]{0,1,2,3,13,8,5};int最大=int.MinValue;intsecond=int.MinValue;foreach(intiinmyArray){if(i>largest){second=largest;最大的=我;}elseif(i>second)second=i;}System.Console.WriteLine(第二个);是的,有2个变量(第一个和第二个)通过数组,每次你计算这两个单元格时你得到(总是把第一个最高的,第二个最高的,第二个)一次传递你将得到第二个的第二个变体更高。您没有指定是否要以最小的复杂性执行此操作。假设您的数组未排序,请参阅:HowtofindthekthlargestelementinanunsortedarrayoflengthninO(n)?要在未排序的数组中找到第K个最大的元素:在O(n)中构建一个最大堆。现在从堆中移除k个元素;每次删除都需要log(n)时间来维护堆。总时间复杂度=O(n+klogn)要了解如何在O(n)中构建最大堆,请参阅BinaryHeapmax1=0;最大值2=0;for(inti=0;imax1){max2=max1;max1=arr[i];}else{if(a[i]!=max1)&&(a[i]>max2)max2[i]=arr[i];}}首先获取max数,一旦改变max,将其与第二个高数进行比较,看是否需要交换。第二个if语句检查该值是否小于max且大于第二个最大值。Exitifandskipiffirstconditionfailedduetoshort所有内容分享,如果对你有用,需要了解更多C#学习教程,希望大家多多关注—staticvoidMain(string[]args){//int[]arr=newint[10]{9,4,6,2,11,100,53,23,72,81};int[]arr={1,8,4,5,12,2,5,6,7,1,90,100,56,8,34};int最大数量=0;int安全号=0;for(inti=0;iMaxNum){if(MaxNum>SecNum){SecNum=MaxNum;}MaxNum=arr[i];}if(arr[i]SecNum){SecNum=arr[i];}}Console.WriteLine("最高数:{0}。次高数{1}。",MaxNum,SecNum);控制台.ReadLine();}int[]myArray=newint[]{0,1,2,3,13,8,5};intnum1=0,temp=0;for(inti=0;i=num1){num1=myArray[i];}elseif((myArray[i]temp)){temp=myArray[i];}}Console.WriteLine("最大的数字是:"+num1);Console.WriteLine("第二高的数字是:"+temp);int[]arr={1,8,4,5,12,2,5,6,7,1,90,100,56,8,34};诠释第一,第二;//假设数组至少有e元素:first=second=arr[0];for(inti=1;istaticvoidMain(string[]args){int[]myArray=newint[]{0,1,2,3,13,8,5,12,11,14};intnum1=0,temp=0;for(inti=0;i=num1){temp=num1;num1=myArray[i];}elseif((myArray[i]temp)){temp=myArray[i];}}Console.WriteLine("最大的数是:"+num1);Console.WriteLine("第二大的数是:"+temp);Console.ReadKey();}本文收集自网络,做不代表立场,如涉及侵权,请点右联系管理员删除,如需转载请注明出处: