leet-code/src/main/java/leetcode/editor/cn/SearchA2dMatrix.java

96 lines
2.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
//
//
// 每行中的整数从左到右按升序排列。
// 每行的第一个整数大于前一行的最后一个整数。
//
//
//
//
// 示例 1
//
//
//输入matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
//输出true
//
//
// 示例 2
//
//
//输入matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
//输出false
//
//
//
//
// 提示:
//
//
// m == matrix.length
// n == matrix[i].length
// 1 <= m, n <= 100
// -104 <= matrix[i][j], target <= 104
//
// Related Topics 数组 二分查找 矩阵
// 👍 478 👎 0
package leetcode.editor.cn;
import com.code.leet.entiy.TwoArray;
//74:搜索二维矩阵
class SearchA2dMatrix {
public static void main(String[] args) {
//测试代码
Solution solution = new SearchA2dMatrix().new Solution();
//true
// TwoArray twoArray = new TwoArray("[[1,3,5,7],[10,11,16,20],[23,30,34,60]]",true);
// System.out.println(solution.searchMatrix(twoArray.getArr(), 3));
//true
TwoArray twoArray = new TwoArray("[[1,3]]", true);
System.out.println(solution.searchMatrix(twoArray.getArr(), 3));
}
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if (target < matrix[0][0] || target > matrix[matrix.length - 1][matrix[0].length - 1]) {
return false;
}
int start = 0;
int end = matrix.length - 1;
while (start < end - 1) {
int mid = (start + end) / 2;
if (matrix[mid][0] == target) {
return true;
}
if (matrix[mid][0] > target) {
end = mid - 1;
} else {
start = mid;
}
}
if (matrix[end][0] == target) {
return true;
}
int xIndex = matrix[end][0] > target ? start : end;
start = 0;
end = matrix[0].length - 1;
while (start < end) {
int mid = (start + end) / 2;
if (matrix[xIndex][mid] == target) {
return true;
}
if (matrix[xIndex][mid] < target) {
start = mid + 1;
} else {
end = mid;
}
}
return matrix[xIndex][start] == target;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}