编写一个算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
萌新不懂算法纯做题,我的思路比较简单,就是把二维数组元素全部赋给一维数组然后进行二分查找
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m=matrix.length;
int n=matrix[0].length;
int[] a=new int[m*n];
int t=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
a[t++]=matrix[i][j];//二维变一维
}
}
int middle=m*n/2;
int left=0,right=m*n-1;
boolean flag=false;
while(true){
if(target<a[left]||target>a[right])break;//如果target小于最左边或者大于最右边,直接退出循环
if(a[middle]==target){//二分查找
flag=true;
break;
}
else if(target<a[middle]){
right=middle-1;
middle=(left+right)/2;
}
else {
left=middle+1;
middle=(left+right)/2;
}
}
return flag;
}
}