LeetCode每日一题:240搜索二维矩阵II
Posted lxy-java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode每日一题:240搜索二维矩阵II相关的知识,希望对你有一定的参考价值。
题目描述:
编写一个高效的算法来搜索 m x n矩阵matrix中的一个目标值target。该矩阵具有以下特性:
每行的元素从左到右升序排列。每列的元素从上到下升序排列。
方法一:暴力法
没啥说的,直接搜。时间复杂度o(mn) 面试0分
方法二:二分搜索
利用每一行的升序特性,对每一行进行二分搜索。时间复杂度o(n*logn)
1 class Solution {
2 public boolean searchMatrix(int[][] matrix, int target) {
3 if(matrix==null || matrix.length==0){
4 return false;
5 }
6 for(int i=0;i<matrix.length;i++){
7 if(binarySearch(matrix,i,target)){
8 return true;
9 }
10 }
11 return false;
12 }
13 private boolean binarySearch(int[][] matrix,int row,int target){
14 int left = 0;
15 int right = matrix[row].length-1;
16
17 while(left<=right){
18 int mid = left + (right-left) / 2;
19
20 if(matrix[row][mid] == target){
21 return true;
22 }
23
24 if(matrix[row][mid] < target){
25 left = mid + 1;
26 }else{
27 right = mid - 1;
28 }
29
30 }
31 return false;
32 }
33 }
方法三:
从左下开始搜索,比target小,向左。比target大,向右。时间复杂度o(m+n)
1 class Solution {
2 public boolean searchMatrix(int[][] matrix, int target) {
3 if(matrix.length==0){
4 return false;
5 }
6 int m = matrix.length;
7 int n = matrix[0].length;
8 int j = 0;
9 int i = n-1;
10 while(i>=0&&j<m){
11 if(matrix[j][i]==target){
12 return true;
13 }
14 if(matrix[j][i]>target){
15 i--;
16 }else{
17 j++;
18 }
19 }
20 return false;
21 }
22 }
以上是关于LeetCode每日一题:240搜索二维矩阵II的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 492. 构造矩形 / 638. 大礼包 / 240. 搜索二维矩阵 II