0
点赞
收藏
分享

微信扫一扫

thinkphp6 Driver [Think] not supported.

 思路:

这道题很有意思 从左到有升序,从上到下升序,斜边从左上到右下也是升序,从右上到做下降序。

如果是从左往右依次遍历,就会面临一个问题向右还是向下,因为都是大于当前值,不好决断,还有回退问题。

所以我们可以从右上开始遍历,对于在右上的元素,想左走依次变小,向下走依次变大,两条不一样的路,就很好找到目标值了。

  1. 如果当前元素大于目标值,我们知道目标值不可能在当前元素的右侧,因为右侧的所有值都比当前值大。因此,我们可以向左移动,排除当前列。
  2. 如果当前元素小于目标值,我们知道目标值不可能在当前元素的上方,因为上方的所有值都比当前值小。因此,我们可以向下移动,排除当前行。
  3. 这种方法的优点是每一步都可以排除一行或一列,从而以线性时间逼近目标值,减少了搜索所需的步骤数。

代码如下:

class Solution {
    public static boolean searchMatrix(int[][] matrix, int target) {
        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
            return false;
        }
        int row = 0;
        int col = matrix[0].length - 1;

        while (row < matrix.length && col >= 0) {
            if (matrix[row][col] == target) {
                return true;
            } else if (matrix[row][col] > target) {
                col--;
            } else {
                row++;
            }
        }
        return false;
    }
}
举报

相关推荐

0 条评论