一、搜索二维矩阵II
240:编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。
class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m = matrix.length;int n = matrix[0].length;int x=0,y=n-1;while(x<m&&y>=0){if(matrix[x][y]==target){return true;}else if(matrix[x][y]>target){y--;}else{x++;}}return false;}
}
二、有序矩阵第K小的元素
378:给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。
class Solution {public int kthSmallest(int[][] matrix, int k) {int low = matrix[0][0];int high = matrix[matrix.length-1][matrix.length-1];while(low<high){//不能直接(low+high)/2,如果low和high都是负数会取整往大的取int mid = low+(high-low)/2;if(check(matrix,mid,k)){//小于等于mid的元素 大于等于k个high = mid;}else{//小于k个low = mid+1;}}return low;}//看矩阵中小于等于mid的元素个数是否大于等于k个public boolean check(int[][] matrix,int mid,int k){int m = matrix.length;int x = m-1;int y = 0;int num = 0;//从左下角往右上方扫描,保证与mid相等的全部算进去while(x>=0&&y<m){if(matrix[x][y]<=mid){num += x+1;y++;}else{x--;}}return num>=k;}
}