博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Leetcode】【Medium】Search a 2D Matrix
阅读量:5083 次
发布时间:2019-06-13

本文共 1673 字,大约阅读时间需要 5 分钟。

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)使用两次二分搜索,先二分搜索列,确定列之后再二分搜索行;(2)将所有元素看成一列有序数列,每个元素的下标是 row*n + col,这样只需使用一次二分搜索;

虽然第二种思路只使用一次二分搜索,代码简介,但是使用第一种思路更好:

1、方法2需要过多的“/”和“%”运算,大大降低了性能;

2、方法2对比方法1,时间复杂度没有提高;

3、由于所有元素标注为0~m*n,相比方法1先在n中二分搜索,再在m中二分搜索,方法2的做法更可能导致整数越界;

因此,选择使用方法1.

代码:

1 class Solution { 2 public: 3     bool searchMatrix(vector
>& matrix, int target) { 4 int first = 0; 5 int last = matrix.size() - 1; 6 while (first < last) { 7 int mid = (first + last) / 2 + 1; 8 if (matrix[mid][0] > target) 9 last = mid - 1;10 else 11 first = mid;12 }13 14 if (matrix[first][0] > target)15 return false;16 17 int row = first;18 first = 0;19 last = matrix[row].size() - 1;20 while (first < last) {21 int mid = (first + last) / 2;22 if (matrix[row][mid] > target)23 last = mid;24 else if (matrix[row][mid] == target)25 return true;26 else 27 first = mid + 1;28 }29 30 return (matrix[row][first] == target);31 }32 };

 

转载于:https://www.cnblogs.com/huxiao-tee/p/4397217.html

你可能感兴趣的文章
html+css 布局篇
查看>>
SQL优化
查看>>
用C语言操纵Mysql
查看>>
轻松学MVC4.0–6 MVC的执行流程
查看>>
redis集群如何清理前缀相同的key
查看>>
Python 集合(Set)、字典(Dictionary)
查看>>
获取元素
查看>>
proxy写监听方法,实现响应式
查看>>
第一阶段冲刺06
查看>>
十个免费的 Web 压力测试工具
查看>>
EOS生产区块:解析插件producer_plugin
查看>>
mysql重置密码
查看>>
jQuery轮 播的封装
查看>>
一天一道算法题--5.30---递归
查看>>
JS取得绝对路径
查看>>
排球积分程序(三)——模型类的设计
查看>>
python numpy sum函数用法
查看>>
php变量什么情况下加大括号{}
查看>>
linux程序设计---序
查看>>
【字符串入门专题1】hdu3613 【一个悲伤的exkmp】
查看>>