随笔- 509  文章- 0  评论- 151  阅读- 22万 

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 };
复制代码

 

 posted on   zhuli19901106  阅读(208)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示