2021 1025 每日一题:搜索二维矩阵2

最初有一个bug 就是当等于第一行的数字时 出错

自己默认以为第二行必定比第一行数字大 其实并不是的

形如 {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}};也满足横向递增 竖向递增

因此虽然能够AE一部分案例 但是其实整个思路都错了 答案是用二分查找或者Z字查找

代码如下:

package leetcode;


class Solution {

public boolean searchMatrix(int[][] matrix, int target) {
boolean isExist=false;
int length=matrix[0].length;
int width=matrix.length; //length表示列数 width表示行数
int index=0;
for(int i=0;i<length;i++) {
if(matrix[0][length-1]<=target){
index=length-1;
break;
}

else if(matrix[0][i]<=target&&matrix[0][i+1]>target) {//这里的等于号 丢掉会有案例bug:“{1,3,5},3 ”分析知道等于号应该在前一个式子上
index=i;
break;
}
}
for(int j=0;j<width;j++) {
if(matrix[j][index]==target) {
isExist=true;
break;
}
}
return isExist;
}

 


public static void main(String[] args) {

Solution solution=new Solution();
// String s="[[]]() }{()}";
int matrix[][]= {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}};
System.out.println(solution.searchMatrix(matrix, 7));
}
}

 

看了思路和正确代码写出来的 需要继续敲

回顾了二分查找以及二维数组取一维

package leetcode;


class Solution {

public boolean searchMatrix(int[][] matrix, int target) {
boolean isExist=false;
for (int[] row : matrix){ //这里的取数组的每一行为一个单独摘出来的数组的方法
if(search(row, target)>=0) {
isExist=true;
}
}
return isExist;
}

int search(int[] matrix ,int target) {
int index=-1;
int head=0;
int tail=matrix.length-1;
while(head<=tail) { //这里有=号 如果没有 当123456 查找4时会令head=tail=4 
int mid=(head+tail)/2;
if(matrix[mid]==target) {
index=mid;
break; //这里的break不要丢 容易无限循环没结果 一直满足条件 不断进行第一个判断
}
else if(matrix[mid]>target) {
tail=mid-1;
}
else if(matrix[mid]<target) {
head=mid+1;
}
}
return index;
}



//public static void main(String[] args) {
//
// Solution solution=new Solution();
//// String s="[[]]() }{()}";
// int matrix[][]= {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}};
// System.out.println(solution.searchMatrix(matrix, 1));
// }
}

posted @ 2021-10-25 19:56  Ssshiny  阅读(48)  评论(0)    收藏  举报