赞
踩
1.二分法
class Solution { public: int kthSmallest(vector<vector<int>>& matrix, int k) { auto n=matrix.size(); int l=matrix[0][0],r=matrix[n-1][n-1]; while(l<r) { int mi=l+(r-l)/2; if(check(matrix,mi,k,n)) r=mi; else l=mi+1; } return l; } bool check(vector<vector<int>>& v,int mid,int k,int n) { int x=n-1,y=0,cnt=0; while(x>=0&&y<n) { if(v[x][y]<=mid) { cnt+=(x+1); ++y; } else --x; } return cnt>=k; } };
class Solution { public: int kthSmallest(vector<vector<int>>& matrix, int k) { struct point { point(int val,int xx,int yy):v(val),x(xx),y(yy) { } bool operator> (const point& r)const { return v>r.v; } int v; int x; int y; }; int n=matrix.size(); priority_queue<point,vector<point>,greater<point>>p; for(int i=0;i<n;++i) { p.emplace(matrix[i][0],i,0); } for(int i=1;i<k;++i) { auto tmp=p.top(); p.pop(); if(tmp.y<n-1) { p.emplace(matrix[tmp.x][tmp.y+1],tmp.x,tmp.y+1); } } return p.top().v; } };
总结:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。