• 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
  • 相关阅读:
    用word2010发个blog
    停止调试无法关闭控制台
    D11.5.8,Lingo中不支持AS3的ExternalInterface接口
    Lingo03 通用脚本和自定义handler
    Lingo01 术语
    Lingo09 Sprite
    Lingo动态创建script member
    tut11脚本基础
    诡异失败的导入对话框
    Lingo3D01 3D Cast Member的组成
  • 原文地址:https://www.cnblogs.com/jsir2016bky/p/5105927.html
Copyright © 2020-2023  润新知