【Leetcode】Search a 2D Matrix

来源:互联网 发布:java 字符串分割 编辑:程序博客网 时间:2024/04/29 01:21

这道题是让在一个二维数组里搜索特定的数

数组的行和列元素全部递增且上一行的最后一个元素小于下一行的第一个元素

这道题首先先搜索行,看看元素在哪一行,然后再到那一行里去找

即先搜索A[target][0], 在搜索A[row][target]

详见代码

public boolean searchMatrix(int[][] matrix, int target) {if (matrix == null || matrix.length == 0 || matrix[0].length == 0)return false;int left = 0;int right = matrix.length - 1;while (left <= right) {int middle = (left + right) / 2;if (matrix[middle][0] == target)return true;if (matrix[middle][0] > target)right = middle - 1;elseleft = middle + 1;}int row = right;if (row < 0)return false;left = 0;right = matrix[0].length - 1;while (left <= right) {int middle = (left + right) / 2;if (matrix[row][middle] == target)return true;if (matrix[row][middle] > target)right = middle - 1;elseleft = middle + 1;}return false;}

首先在第一列中寻找元素在哪一行

int left = 0;int right = matrix.length - 1;while (left <= right) {int middle = (left + right) / 2;if (matrix[middle][0] == target)return true;if (matrix[middle][0] > target)right = middle - 1;elseleft = middle + 1;}

然后确定了行后再看元素在哪一列

int row = right;if (row < 0)return false;left = 0;right = matrix[0].length - 1;while (left <= right) {int middle = (left + right) / 2;if (matrix[row][middle] == target)return true;if (matrix[row][middle] > target)right = middle - 1;elseleft = middle + 1;}
注意这里row一定要定义为right

因为当跳出循环的时候 left一定>right,所以right才是对应的行数。这个大家可以在纸上画一画就明白了。

0 0
原创粉丝点击