您的位置:首页 > 其它

378. Kth Smallest Element in a Sorted Matrix(unsolved)

2017-02-23 15:39 399 查看
Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth smallest element in the matrix.

Note that it is the kth smallest element in the sorted order, not the kth distinct element.

Example:

matrix = [

[ 1, 5, 9],

[10, 11, 13],

[12, 13, 15]

],

k = 8,

return 13.

解答:这道题比较难,要用二分法去理解。首先算出最大值和最小值(可理解为最右最左)的平均数,然后计算矩阵中小于平均数的个数有多少,若小于k,说明第k小的数在右边,若大于k,说明第k小的数在左边。然后更新最右最左,更新策略与平均值有关,然后会得到新的平均值,直到达到第k小为止。应注意,所有值都应是int,不能是小数,包括平均值,这样才能是第k小。

但是有一个疑问就是有没有可能最后得到的平均值没有在矩阵中出现呢?按照这种方法似乎是可能的,这个我也不明白。

class Solution {
public:
int kthSmallest(vector<vector<int>>& matrix, int k) {
int n=matrix.size();
int left=matrix[0][0],right=matrix[n-1][n-1];

while(left<right)
{
int mid=(left+right)/2;
int count=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(matrix[i][j]<=mid) count++;
}
}

if(count<k)
{
left=mid+1;
}
else
{
right=mid;
}
}
return left;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: