二分排序
class Solution {
public int kthSmallest(int[][] matrix, int k) {
//二分法合并
int left = 0,right = matrix.length - 1;
int mid = (left + right) / 2;
int[] result = twoMerge(matrix,left,right);
return result[k - 1];
}
private int[] twoMerge(int[][] matrix, int left, int right) {
//递归终止,当left = right
if (left == right)
return matrix[left];
int mid = (left + right) / 2;
return merge(twoMerge(matrix,left,mid),twoMerge(matrix,mid + 1,right));
}
private int[] merge(int[] ints, int[] ints1) {
int length1 = ints.length;
int length2 = ints1.length;
int index = 0,index1 = 0,index2 = 0;
int[] result = new int[length1 + length2];
while (index1 < length1 && index2 < length2){
if (ints[index1] <= ints1[index2]){
result[index++] = ints[index1];
index1++;
}
else{
result[index++] = ints1[index2];
index2++;
}
}
while (index1 < length1)
result[index++] = ints[index1++];
while (index2 < length2)
result[index++] = ints1[index2++];
return result;
}
}