• 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.

    Analyse: binary search. 
    Runtime: 12ms.
     1 class Solution {
     2 public:
     3     bool searchMatrix(vector<vector<int>>& matrix, int target) {
     4         if(matrix.empty() || matrix[0].empty()) return false;
     5         
     6         int m = matrix.size(), n = matrix[0].size();
     7         // target the row, low would be the target
     8         int low = 0, high = m - 1;
     9         while(low < high) {
    10             int mid = low + (high - low) / 2;
    11             if(matrix[mid][n - 1] > target) high = mid;
    12             else if(matrix[mid][n - 1] < target) low = mid + 1;
    13             else return true;
    14         }
    15         
    16         // target the column
    17         int start = 0, end = n - 1;
    18         while(start < end) {
    19             int mid = start + (end - start) / 2;
    20             if(matrix[low][mid] > target) end = mid;
    21             else if(matrix[low][mid] < target) start = mid + 1;
    22             else return true;
    23         }
    24         return matrix[low][start] == target;
    25     }
    26 };
  • 相关阅读:
    java方法执行超时关闭
    PostGIS-将多面转换为单面(PostGIS
    deepin安装JDK
    Power Designer反向工程
    【Redis实操】twemproxy代理搭建
    mysql 一些语句
    利用insertd查出更新记录
    sqlserver 存储过程分页
    sqlserver存储过程分页记录
    js group by
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/5759469.html
Copyright © 2020-2023  润新知