昨天看到一个题目,“寻找给定数组中第二大的元素”。这个很好考虑:假如第二大的元素是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];
}
}
}
回头再写个算法时间空间复杂度分析,我觉得我这种方法应该是比较快的吧。