lintcode(401)排序矩阵中的从小到大第k个数

来源:互联网 发布:广电网络三合一机顶盒 编辑:程序博客网 时间:2024/05/16 23:04

描述:

在一个排序矩阵中找从小到大的第 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;    }}


0 0
原创粉丝点击