白菜刷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]; };
看来没有那么多难题,只要善用自己拥有的知识。