描述:
在一个排序矩阵中找从小到大的第 k 个整数。
排序矩阵的定义为:每一行递增,每一列也递增。
样例:
给出 k = 4
和一个排序矩阵:
[
[1 ,5 ,7],
[3 ,7 ,8],
[4 ,8 ,9],
]
返回 5
。
思路:
把原题分解成将若个有序数组的合并,建立数组记录各行已经的未合并元素的位置,直到循环执行k次为止
public class Solution {
/**
* @param matrix: a matrix of integers
* @param k: an integer
* @return: the kth smallest number in the matrix
*/
public int kthSmallest(int[][] matrix, int k) {
// write your code here
if(matrix == null || matrix.length == 0){
return 0;
}
int result = 0;
int[] row = new int[matrix.length];
for(int i = 0;i<row.length;i++){
row[i] = 0;
}
for(int j = 0;j<k;j++){
int flag = 0;
int temp = Integer.MAX_VALUE;
for(int i = 0;i<row.length;i++){
if(row[i] < matrix[0].length){
if(matrix[i][row[i]] < temp){
temp = matrix[i][row[i]];
flag = i;
}
}
}
row[flag]++;
result = temp;
}
return result;
}
}