白菜刷LeetCode记-378. Kth Smallest Element in a Sorted Matrix

简单题真的越来越少了,今天的还是中等难度的题目,不过自己也要改一下自己的心态了,不能因为是中等题就瑟瑟发抖。

今天的题目如下:

这道题是要寻找矩阵中第k个小的元素的值,在矩阵中的每一行跟每一列是递增的。

看到题目是说矩阵中每一行每一列都是递增的,那么应该有一个能够仅仅通过在矩阵上比较大小就可以获取第k个小的值啊。

结果思考了很久都没有找到方案,在网上找了一下答案,似乎都是用将矩阵转化成其他数据结构再进行处理的方法。好吧,屈服了。

于是只能用老方法去处理了,思路是:

1、创建一个Map,遍历矩阵,以矩阵元素的值作为Map的键,元素的值出现次数为Map的值;

2、将Map导入到一个数组当中,对数组排序,然后算出哪个才是第k小的值。

代码如下:

/**
 * @param {number[][]} matrix
 * @param {number} k
 * @return {number}
 */
var kthSmallest = function(matrix, k) {
    let count = 0, n = matrix.length;
    let myMap = new Map();
    let myArr = new Array();
    
    for(let i = 0 ; i < n ; i++){
        for(let j = 0 ; j < n ; j++){
            if(myMap.has(matrix[i][j])){
                myMap.set(matrix[i][j], myMap.get(matrix[i][j])+1);
            }else{
                myMap.set(matrix[i][j],1);
            }
        }
    }
    
    myArr = Array.from(myMap);
    
    myArr.sort((a,b)=>(a[0]-b[0]));
    
    let arridx;
    for(arridx = 0 ; arridx < myArr.length ; arridx++){
        count += myArr[arridx][1];
        if(count >= k){
            break;
        }
    }
    
    return myArr[arridx][0];
};

看来没有那么多难题,只要善用自己拥有的知识。

原文地址:https://www.cnblogs.com/sssysukww/p/9673519.html