publicbooleansearchMatrix(int[][] matrix,int target){for(int i =0; i<matrix.length;i++){boolean isTrue =search(matrix[i],target);if(isTrue)returntrue;}returnfalse;}//二分查找方法publicbooleansearch(int[] nums,int target){int begin =0;//二分起点int end = nums.length-1;//二分末尾点while(begin <= end){int mid =(end - begin)/2+ begin;//取中间点下标int midNum = nums[mid];//中间元素//判断中间元素与target大小if(target == midNum)returntrue;//如果中间元素等于目标元素 直接返回结果elseif(target > midNum ) begin = mid+1;//如果中间元素小于目标值 说明寻找元素肯定在mid+1 , end区间 更新下次起点elseif(target < midNum ) end = mid-1;//同理}//循环完没有找到mid元素 说明不存在targetreturnfalse;}
方法三:列倒序Z字形查找
//关键在于这个判断 if(matrix[row][col]> target) col --;//若该位置的元素>目标元素,则往左移动一位elseif(matrix[row][col]< target) row ++;//若该位置的元素<目标元素,则往下移动一位elsereturntrue;//若满足相等的条件 则返回true
publicbooleansearchMatrix(int[][] matrix,int target){int m = matrix.length;int n = matrix[0].length;int row =0;//行int col = n -1;//列while(row < m && col>=0){if(matrix[row][col]> target) col --;//若该位置的元素>目标元素,则往左移动一位elseif(matrix[row][col]< target) row ++;//若该位置的元素<目标元素,则往下移动一位elsereturntrue;//若满足相等的条件 则返回true}returnfalse;}