JAVA算法练习题day18
21搜索二维矩阵②
没想起来:要想查找一个数,并且数组是有序的,应当用二分。
二分:
class Solution {public boolean searchMatrix(int[][] matrix, int target) {//二分for(int i = 0 ;i<matrix.length;i++){if(my_erFen(matrix[i],target)) return true;}return false;}private boolean my_erFen(int[] row,int target){int l = 0,r = row.length-1;while(l<r){int mid = (l+r)/2;if(row[mid]>=target) r = mid;else l = mid+1;}if(row[l]==target) return true;return false;}
}
力扣官方题解,Z形查找(差点就想出来了);
class Solution {public boolean searchMatrix(int[][] matrix, int target) {//从右上角开始搜,如果一下步搜索的坐标越过了边界,则不存在targetint x = 0, y=matrix[0].length-1;while(x<=matrix.length-1 && y >=0){if(matrix[x][y]<target) x++;else if(matrix[x][y]>target) y--;else return true;}return false;}
}
重新学习二分查找-ACWING算法基础课
二分查找:
一,整数二分
给check(mid)考察的是哪个区间的性质,就是在找该区间的边界(边界也符合区间的性质)。
对应练习:ACWING789数的范围
二,浮点数二分
当区间长度小到一定程度时候,就认为找到了答案。