zoukankan      html  css  js  c++  java
  • leetcode74 Search a 2D Matrix

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:

    • Integers in each row are sorted from left to right.
    • The first integer of each row is greater than the last integer of the previous row.

    For example,

    Consider the following matrix:

    [
      [1,   3,  5,  7],
      [10, 11, 16, 20],
      [23, 30, 34, 50]
    ]
    

    Given target = 3, return true.

     1 class Solution { //第一个算法书写简单,O(m+n),第二个算法书写稍复杂,O(log(m)+log(n))
     2 public:
     3     bool searchMatrix(vector<vector<int>>& matrix, int target) {
     4         int m=matrix.size();
     5         if(!m)
     6             return false;
     7         int n=matrix[0].size();
     8 /*        
     9         int i=0;
    10         while(i<m&&matrix[i][0]<=target)
    11         {
    12             i++;
    13         }
    14         i--;
    15         if(i<0)
    16             return false;
    17         for(int j=0;j<n;j++)
    18         {
    19             if(matrix[i][j]==target)
    20                 return true;
    21         }
    22         return false;
    23 */
    24         
    25         int a=0,b=m-1;
    26         while(a<b)
    27         {
    28             int mid=a+(b-a)/2;
    29             int cur=matrix[mid][0];
    30             if(cur==target)
    31                 return true;
    32             if(cur>target)
    33                 b=mid;
    34             else
    35             {
    36                 if(a==mid)
    37                 {
    38                     if(matrix[b][0]>target)
    39                         b=a;
    40                     else
    41                         a=b;
    42                 }
    43                 else
    44                     a=mid;
    45             }
    46         }
    47         int i=a;
    48         a=0;b=n-1;
    49         while(a<=b)
    50         {
    51             int mid=a+(b-a)/2;
    52             int cur=matrix[i][mid];
    53             if(cur==target)
    54                 return true;
    55             if(cur<target)
    56                 a=mid+1;
    57             else
    58                 b=mid-1;
    59         }
    60         return false;
    61     }
    62 };
    View Code
  • 相关阅读:
    创建被访问的swf文件
    BFS寻路算法的实现
    Flex里的命名空间,fx、mx、s【转】
    Flex的基础用法【转】
    Pow(x, n)
    Roman to Integer
    Integer to Roman
    Divide Two Integers
    Single Number II
    Single Number I
  • 原文地址:https://www.cnblogs.com/jsir2016bky/p/5105927.html
Copyright © 2011-2022 走看看