昨天看到一个题目,“寻找给定数组中第二大的元素”。这个很好考虑:假如第二大的元素是k,那么遍历整个数组大于k的元素数必然为1. 固有以下代码:
for(i =0;i<10;i++)
{
flag = 0;
for(j=0;j<10;j++)
{
if(arr[i] < arr[j])
flag++;
if(flag > 1)
break;
if((flag == 1) && (j == 9))
{
printf("%d\n",arr[i]);
i=10;//结束外层循环
}
}
}忽然想起来以前似乎看到过有问“寻找数组第n大元素的问题”,就可以把上面的推广下:
int findnbig(int array[],int m,int n)
{
int i,j,flag;
for(i = 0;i < m;i++)
{
flag = 0;
for(j = 0;j < m;j++)
{
if(array[i] < array[j])
flag++;
if(flag > n-1)
break;
if((flag == n-1) && (j == m-1))
return array[i];
}
}
}回头再写个算法时间空间复杂度分析,我觉得我这种方法应该是比较快的吧。
本文介绍了一种寻找数组中第N大元素的方法,并提供了一个具体的实现代码示例。该方法通过遍历数组来确定指定排名的元素。
1033

被折叠的 条评论
为什么被折叠?



