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

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

Search a 2D Matrix

Total Accepted: 43629 Total Submissions: 138231

 
 

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.

常规思路, 多次二分

bool searchMatrix(vector
>& matrix, int target) { if(matrix.empty()) return false; vector
firstCol; for(auto v : matrix) firstCol.push_back(v[0]); if(binary_search(firstCol.begin(), firstCol.end(), target)) return true; vector
::iterator iter = lower_bound(firstCol.begin(), firstCol.end(), target); int low = iter - firstCol.begin(); for(int i = 0; i < low; i++) { if(binary_search(matrix[i].begin(), matrix[i].end(), target)) return true; } return false; }

 

投机取巧,存在潜在的bug

 

bool searchMatrix(vector
>& matrix, int target) { int rows = matrix.size(); if (rows == 0) return false; int cols = matrix[0].size(); int first = 0, last = rows * cols - 1; if (target < matrix[0][0] || target > matrix[rows - 1][cols - 1]) return false; int mid, val; // binary search while (first <= last) { mid = first + (last - first) / 2; val = matrix[mid / cols][mid % cols]; if (val > target) last = mid - 1; else if (val == target) return true; else first = mid + 1; } return false; }

 

转载于:https://www.cnblogs.com/ydlme/p/4589402.html

你可能感兴趣的文章
Ubuntu:让桌面显示回收站
查看>>
Android上传头像代码,相机,相册,裁剪
查看>>
git 安装体验
查看>>
Oracle 给已创建的表增加自增长列
查看>>
《DSP using MATLAB》Problem 2.17
查看>>
if 循环
查看>>
uva 111 History Grading(lcs)
查看>>
Python学习week2-python介绍与pyenv安装
查看>>
php判断网页是否gzip压缩
查看>>
一个有意思的js实例,你会吗??[原创]
查看>>
sql server中bit字段实现取反操作
查看>>
Part3_lesson2---ARM指令分类学习
查看>>
jQuery拖拽原理实例
查看>>
JavaScript 技巧与高级特性
查看>>
Uva 11729 Commando War
查看>>
增强学习(一) ----- 基本概念
查看>>
ubuntu下USB连接Android手机
查看>>
C# 语句 分支语句 switch----case----.
查看>>
lseek函数
查看>>
反射获取 obj类 的属性 与对应值
查看>>