博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Search a 2D Matrix II
阅读量:2341 次
发布时间:2019-05-10

本文共 1798 字,大约阅读时间需要 5 分钟。

思想:

从左边用二分查找,找到第一个大于目标的行。如果没有大于就返回最后一个小于或者等于的行。然后在行内再用二分查找看看有没有对应的数。

public class Solution {
public boolean searchMatrix(int[][] matrix, int target) { int latRow=getRow(matrix, target, 0, matrix.length-1); for(int i=0;i<=latRow;i++) { if(Arrays.binarySearch(matrix[i], target)>=0) { return true; } } return false; } public int getRow(int [][] matrix,int target,int begin,int end) { if(begin==end) { return end; } if(begin>end) { return begin; } int middle=(begin+end)/2; if(matrix[middle][0]<=target) { return getRow(matrix, target, middle+1, end); } else { return getRow(matrix, target, begin, middle-1); } }}

还有一个别人的思路

just like searching a sorted an array; find the middle element and recursively search the rest 3/4 matrix; a decrease (devide) and conquer solution;

The time complexity is T(mn) = T(1/4 mn) + T(1/2 m*n) + 1

public boolean searchMatrix(int[][] matrix, int target) {    return(searchMatrixHelper(matrix, 0, 0, matrix.length-1, matrix[0].length-1, target));}private boolean searchMatrixHelper (int[][] matrix, int i, int j, int i_, int j_, int target){    if(i > i_ || j> j_){        return false;    }    int midRow= (i+i_)/2; int midCol=(j+j_)/2;    if(matrix[midRow][midCol] == target){        return true;    }else if(matrix[midRow][midCol] > target){        return (searchMatrixHelper(matrix, i ,j, i_, midCol-1, target) || searchMatrixHelper(matrix, i, midCol, midRow-1, j_, target));    }else{        return (searchMatrixHelper(matrix, midRow+1 ,j, i_, j_, target) || searchMatrixHelper(matrix, i, midCol+1, midRow, j_, target));    }}

转载地址:http://sbuvb.baihongyu.com/

你可能感兴趣的文章
简述:为什么硅胶按键要使用镭雕工艺?
查看>>
在硅胶产品表面处理中,丝印、移印与镭雕的区别
查看>>
java 内存模型:重排序
查看>>
spring IOC容器:控制反转
查看>>
处理器重排序与内存屏障
查看>>
Java内存模型 之三个特性:
查看>>
Java内存 happens-before原则
查看>>
Java虚拟机:类的初始化
查看>>
Oracle表连接方法 (上)
查看>>
谈mvc
查看>>
给年轻工程师的十大忠告!
查看>>
少走弯路的十条忠告
查看>>
未婚男子必读的31条感悟
查看>>
Proteus 使用虚拟串口
查看>>
使用软件虚拟串口
查看>>
MSComm 控件
查看>>
在VC6.0及VS中添加对话框oninitdialog()函数的方法
查看>>
用控件(CMSComm)串口调试问题的解决
查看>>
Windows CE下的串口通信编程
查看>>
串口通信学习(发送)
查看>>