NO.74 搜索二维矩阵 中等
思路一:暴力 遍历数组。
思路二:二分法 数组的特性是有序的,很明显需要去二分。
如果我们创建一个大小是r*c的一维数组,将二维数组的值拷贝一份,那么就变成了熟悉的二分查找了。
但是实际上比不需要创建这么一个一维数组,因为二维数组每个元素本身的索引就是有序的。
直接将二维数组看作是索引区间是[0,r*c-1]的一维数组即可,这样我们可以很熟悉的找到start、end、mid,需要思考的就是将mid索引转换成二维数组中对应的元素下标。
[0,r*c-1]中的任何一个索引idx都可以通过matrix[idx/c][idx%c]
的形式转换成二维数组中的准确元素。
1 | public boolean searchMatrix(int[][] matrix, int target) { |
时间复杂度:O(log(r*c))
本人菜鸟,有错误请告知,感激不尽!
更多题解和源码:github