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

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

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.

方法一,先纵向查找,再横向查找,时间复杂度为O(logm)+O(logn)

class Solution {public:    bool searchMatrix(vector
> &matrix, int target) { int n = matrix.size(), m = matrix[0].size(); if(target < matrix[0][0] || target >matrix[n-1][m-1]) return false; int left = 0 , right = n-1, targetRow = 0; //纵向二分查找 while(left <= right){ int mid = (left+right)>>1; if(matrix[mid][0] > target ) right = mid-1; else if(matrix[mid][0] < target) left = mid+1; else break; } if(left>right) targetRow =right; else return true; //横向二分查找 left = 0;right = m-1; while(left <= right){ int mid = (left+right)>>1; if(matrix[targetRow][mid] > target) right = mid-1; else if(matrix[targetRow][mid] < target) left = mid+1; else break; } if(left <=right ) return true; else return false; }};
先纵向后横向查找

方法二,直接二分查找

class Solution {public:    bool searchMatrix(vector
> &matrix, int target) { int n = matrix.size(), m = matrix[0].size(); if(target < matrix[0][0] || target >matrix[n-1][m-1]) return false; int left = 0 , right = n*m-1; while(left<=right){ int mid = (left+right)>>1; if(matrix[mid/m][mid%m] > target) right = mid-1; else if(matrix[mid/m][mid%m] < target) left = mid+1; else return true; } return false; }};
整体查找

 

 

转载于:https://www.cnblogs.com/xiongqiangcs/p/3809190.html

你可能感兴趣的文章
ECSHOP让产品浏览历史按照先后进行排序
查看>>
解决小程序中 cover-view无法盖住canvas的问题,仅安卓真机出现
查看>>
C# 获取数组的内存地址
查看>>
职场规则五
查看>>
跟我一起学WCF(1)——MSMQ消息队列
查看>>
京东联盟采集规则
查看>>
hdu-1143(简单dp)
查看>>
字典树
查看>>
ControlExtensionTest(二)-----CCControlSlider
查看>>
CentOS 开发环境准备
查看>>
正则表达式在.net中的应用—新手工作笔记
查看>>
5-2 彩色图片直方图
查看>>
02_servlet介绍
查看>>
详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化
查看>>
svn出现skips remain conficted,不能更新代码问题
查看>>
实验4
查看>>
day 13 内置函数 闭包:
查看>>
Angular——自定义指令
查看>>
SQL Server nested loop join 效率试验
查看>>
pg数据库sql积累
查看>>