LeetCode 240. Search a 2D Matrix II
2020-06-09 16:01:20
# leetcode
Problem
LeetCode 240. Search a 2D Matrix II
1. 题目简述
给出一个m * n大小的矩阵,以及一个target,返回该矩阵中是否存在该数字。该矩阵有如下两条性质:
- 每一行从左到右都是递增的整形数
- 每一列从上至下都是递增的整形数
例如:
Consider the following matrix:
[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
Given target = 5, return true.
Given target = 20, return false.
2. 算法思路
相关问题:
这是一类很特殊的二分查找的题目,建议背下来,它并不是全局有序,而是拥有一些有序的特性,总结为下面两点:
- 矩阵的左上角的值全局最小;右下角的值全局最大;
- 对于每个L型的路径,其都是有序的,例如第一列和最后一行构成的L型或者第一行和最后一列构成的L型。
那么利用这些性质,我们应该如何去做呢?根据二分查找,我们将start设置为matrix[0][0],end设为matrix[m - 1][n - 1](m、n为行数和列数)。然后我们遍历的起点要从右上角或者左下角开始,每次舍弃一行或者一列。
二分搜索
注意一下这里的起点和终点即可。
1 | class Solution { |