我正在尝试找到给定排序数组的最大k数字。
ex:输入 -> [5、12、45、32、9、20、15]输出 -> k = 3,[45,32,20]
到目前为止,我编写的代码返回了最大的K元素,但是它需要返回最大的K数字。任何帮助将不胜感激。
public static int max_Numbers(int [] p, int K, int firstNum, int lastNum)
{
int pivot = partitionArr(p, firstNum, lastNum);
int m = p.length - K;
if (m == pivot)
{
return p[pivot];
}
if(m > pivot)
{
return max_Numbers(p, K, pivot + 1, lastNum);
}
else
{
return max_Numbers(p, K, firstNum, pivot - 1);
}
}
使用您的排序阵列,
for(int i=array.length-1; i>=0 && array.length-1 - i < K; i--) System.out.println(array[i]));
您正在使用的枢轴和分区的一个属性是,在每个分区步骤之后,可以保证枢轴之前的所有元素恰好比枢轴更小或等于枢轴,以及之后的所有元素枢轴更大。因此,在找到k-th的枢轴之后,该数组将在其之后具有最大的k。