题目描述:
题目分析:
本题的本质是一个查找算法,为了提高性能可以使用二分查找,这个二维矩阵可以看出许多个数组,只需要对每个数组都进行一次二分查找就可以实现查找整个二维矩阵。(二分查找的解析可以看之前https://mp.csdn.net/mp_blog/creation/editor/155892434)
代码如下:
class Solution { private int erfen(int[] nums,int target){ int right=nums.length-1; int left=0; while(left<=right){ int mid=(right-left)/2+left; if(target>nums[mid]){ left=mid+1; }else{ right=mid-1; } } return left; } public boolean searchMatrix(int[][] matrix, int target) { int n=matrix.length; for(int i=0;i<n;i++){ int weizi=erfen(matrix[i],target); if(weizi<matrix[i].length&&matrix[i][weizi]==target){ return true; } } return false; } }要点解析:
二分查找返回的是目标值最先出现的位置或者是在有序数组中的插入位置,如果是在有序数组中的插入位置则可能为在数组最后一个位置加一个数,这是如果进行matrix[i][weizi]==target的判断的话会导致数组越界,必须先处理越界问题,最终判断条件应为weizi<matrix[i].length&&matrix[i][weizi]==target。