一. 问题描述
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
示例 1:
输入:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
输出: true
示例 2:
输入:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 13
输出: false
二. 解题思路
解题思路:采用二分查找的方法进行查找
步骤一:首先对第一列进行二分查找,找到目标数可能在哪一行。
步骤二:对目标行进行二分查找,判断目标数是否存在(这一题步骤二偷懒了,直接遍历的)。
三. 执行结果
执行用时 :1 ms, 在所有 java 提交中击败了78.93%的用户
内存消耗 :42.7 MB, 在所有 java 提交中击败了38.63%的用户
四. Java代码
class Solution { public boolean searchMatrix(int[][] matrix, int target) { if(matrix==null||matrix.length<=0||matrix[0].length<=0) { return false; } int row=0; int first=0; int second=matrix.length-1; while(first<=second) { row=(first+second)/2; if((row<matrix.length-1&&(matrix[row][0]<=target&&matrix[row+1][0]>target))||((row==matrix.length-1)&&(matrix[row][0]<=target))){ break; } else { if(matrix[row][0]>target) { second=row-1; } else { first=row+1; } } } for(int i=0;i<matrix[row].length;i++) { if(matrix[row][i]==target) { return true; } } return false; } }
原文地址:https://www.cnblogs.com/xiaobaidashu/p/11707580.html
时间: 2024-11-08 01:59:56