day12 leetcode-hot100-21(矩阵4)
240. 搜索二维矩阵 II - 力扣(LeetCode)
1.暴力法O(m*n)
思路:两层for循环即可。
2.二分查找O(m*logn)
思路:每行都用二分查找,因为每行都是排好序的
class Solution {public boolean searchMatrix(int[][] matrix, int target) {for(int[] row : matrix){if(search_t(row,target)){return true;}}return false;}public boolean search_t(int[] nums,int t){int l=0;int r=nums.length-1;while(l<=r){int mid=(r-l)/2+l;if(nums[mid]==t){return true;}if(nums[mid]>t){r=mid-1;}if(nums[mid]<t){l=mid+1;}}return false;}}
3.Z字搜索
思路
因为每行都是递增的,每列也是递增的,所以我们可以选择从右上角开始遍历,遇到大于target的那就向左走,遇到小于target那就向下走。
具体代码
class Solution {public boolean searchMatrix(int[][] matrix, int target) {int n=matrix[0].length;int x=0;int y=n-1;while(x<=matrix.length-1 && y>=0){if(matrix[x][y]==target){return true;}if(matrix[x][y]>target){y--;}else{x++;}}return false;}}