题目描述:
public static int[] kthMinPair(int[] arr, int k) {
int N = arr.length;
if(k > N * N) return null;
//先进行排序
Arrays.sort(arr);
//第k小的数的第一维数字在arr中是什么 注意下标是从0开始的 所以需要减1
int firstNum = arr[(k - 1) / N]; //第一维的数字
int lessFirstNumSize = 0; //比第一维数字小的个数
int firstNumSize = 0; //第一维数字的个数
for(int i = 0; i < N && arr[i] <= firstNum; i++) {
if(arr[i] < firstNum) {
lessFirstNumSize++;
}else {
firstNumSize++;
}
}
int rest = k - (lessFirstNumSize * N);
//-1是因为索引是从0开始的 即第一小对应的下标是0 第二对应的是1
return new int[] {firstNum, arr[(rest - 1) / firstNumSize]};
}