寻找第n大的元素
昨天看到一个题目,“寻找给定数组中第二大的元素”。这个很好考虑:假如第二大的元素是k,那么遍历整个数组大于k的元素数必然为1. 固有以下代码:
1 for(i =0;i<10;i++) 2 { 3 flag = 0; 4 for(j=0;j<10;j++) 5 { 6 7 if(arr[i] < arr[j]) 8 flag++; 9 if(flag > 1) 10 break; 11 if((flag == 1) && (j == 9)) 12 { 13 printf("%d\n",arr[i]); 14 i=10;//结束外层循环 15 } 16 17 } 18 19 }
忽然想起来以前似乎看到过有问“寻找数组第n大元素的问题”,可以把上面的推广下:
1 int findnbig(int array[],int m,int n) 2 { 3 int i,j,flag; 4 for(i = 0;i < m;i++) 5 { 6 flag = 0; 7 for(j = 0;j < m;j++) 8 { 9 10 if(array[i] < array[j]) 11 flag++; 12 if(flag > n-1) 13 break; 14 if((flag == n-1) && (j == m-1)) 15 return array[i]; 16 17 } 18 19 } 20 }
回头再写个算法时间空间复杂度分析,我觉得我这种方法应该是比较快的吧。