剑指offer-二维数组中的查找-Java版
二维数组中的查找
http://www.nowcoder.com/questionTerminal/abc3fe2ce8e146608e868a70efebf62e
写在前面
代码说明:代码的下载地址: https://github.com/WuNianLuoMeng/Coding
视频说明:第一次以这样的形式录视频,如果有哪里说的不对,还请各位及时指出,谢谢~
二维数组中的查找 视频链接
方法一:
通过遍历array数组,去查找array数组中有没有target的值。它的时间复杂度是(O(n * m))
public boolean Find(int target, int [][] array) { for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[0].length; j++) { if (array[i][j] == target) return true; } } return false; }
方法二(从矩阵的右上角开始找):
设置一个i,j表示所找当前位置,如果说array[i][j] > target大的话,接着就往左找,反之往下找,直到找到array[i][j] == target为止。它的时间复杂度是:O(n + m)
public boolean Find(int target, int [][] array) { int i = 0; int j = array[0].length - 1; while(i >= 0 && i < array.length && j >= 0 && j < array[0].length) { // array[i][j] if (array[i][j] == target) return true; else if (array[i][j] > target) j--; else i++; } return false; }
方法三(从矩阵的左下角开始找):
设置一个i,j表示所找当前位置,如果说array[i][j] > target大的话,接着就往上找,反之往右找,直到找到array[i][j] == target为止。它的时间复杂度是:O(n + m)
public boolean Find(int target, int [][] array) { int i = array.length - 1; int j = 0; while(i >= 0 && i < array.length && j >= 0 && j < array[0].length) { // array[i][j] if (array[i][j] == target) return true; else if (array[i][j] > target) i--; else j++; } return false; }