zoukankan      html  css  js  c++  java
  • LeetCode

    Search a 2D Matrix

    2013.12.22 04:30

    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.

    Solution:

      Since the m x n matrix is sorted, we can think of it as an m * n array. Binary search will solve the problem efficiently.

      Time complexity is O(log2(m * n)), space complexity is O(1).

    Accepted code:

     1 // 1AC, yeah~ 2D-address mapping on an array, then done with binary search. 
     2 class Solution {
     3 public:
     4     bool searchMatrix(vector<vector<int> > &matrix, int target) {
     5         // IMPORTANT: Please reset any member data you declared, as
     6         // the same Solution instance will be reused for each test case.
     7         int m, n;
     8         int mn;
     9         
    10         m = matrix.size();
    11         if(m <= 0){
    12             return false;
    13         }
    14         
    15         n = matrix[0].size();
    16         if(n <= 0){
    17             return false;
    18         }
    19         
    20         mn = m * n;
    21         
    22         int left, mid, right;
    23         left = 0;
    24         right = mn - 1;
    25         while(right >= left){
    26             mid = (left + right) / 2;
    27             if(target > matrix[mid / n][mid % n]){
    28                 left = mid + 1;
    29             }else if(target < matrix[mid / n][mid % n]){
    30                 right = mid - 1;
    31             }else{
    32                 return true;
    33             }
    34         }
    35         
    36         return false;
    37     }
    38 };
  • 相关阅读:
    设计模式:组合模式
    对技术的认识及思考
    设计模式:策略模式
    java集合:常用集合的数据结构
    设计模式:代理模式
    java反射
    Spring事务管理
    在Spring使用junit注解进行单元测试
    tomcat限制ip访问
    获取openid回调两次
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3485747.html
Copyright © 2011-2022 走看看