博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lintcode-28-搜索二维矩阵
阅读量:5221 次
发布时间:2019-06-14

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

写出一个高效的算法来搜索 m × n矩阵中的值。

这个矩阵具有以下特性:
每行中的整数从左到右是排序的。
每行的第一个数大于上一行的最后一个整数。

样例

考虑下列矩阵:

[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
给出 target = 3,返回 true

挑战

O(log(n) + log(m)) 时间复杂度

标签

二分法 雅虎 矩阵

思路

采用二分查找,先二分查找target所在行,在二分查找所在列

code

class Solution {public:    /**     * @param matrix, a list of lists of integers     * @param target, an integer     * @return a boolean, indicate whether matrix contains target     */    bool searchMatrix(vector
> &matrix, int target) { // write your code here int rowSize = matrix.size(); if(rowSize < 1) return false; int colSize = matrix[0].size(); if(target < matrix[0][0] || target > matrix[rowSize-1][colSize-1]) return false; int rowIndex = 0, colIndex = 0; int rowHigh = rowSize-1, rowLow = 0, rowMid = (rowHigh + rowLow) / 2; while(rowLow <= rowHigh) { if(matrix[rowMid][0] == target || matrix[rowMid][colSize-1] == target) { return true; } else if(matrix[rowMid][0] < target && matrix[rowMid][colSize-1] > target) { rowIndex = rowMid; break; } else if(matrix[rowMid][0] > target) { rowHigh = rowMid - 1; rowMid = (rowHigh + rowLow) / 2; } else if(matrix[rowMid][colSize-1] < target){ rowLow = rowMid + 1; rowMid = (rowHigh + rowLow) / 2; } } int colHigh = colSize-1, colLow = 0, colMid = (colHigh + colLow) / 2; while(colLow <= colHigh) { if(matrix[rowIndex][colMid] == target) { return true; } else if(matrix[rowIndex][colMid] < target) { colLow = colMid + 1; colMid = (colHigh + colLow) / 2; } else { colHigh = colMid - 1; colMid = (colHigh + colLow) / 2; } } return false; }};

转载于:https://www.cnblogs.com/libaoquan/p/7009981.html

你可能感兴趣的文章
WebView 调试
查看>>
IB使用
查看>>
Linux硬链接和软链接(符号链接)
查看>>
git stash
查看>>
Apache Common-IO 使用
查看>>
Java-第一课正则表达式
查看>>
深入剖析,什么是eval的直接调用.
查看>>
apidoc
查看>>
3月14日-15日学习总结
查看>>
关于 ++x 和 x++ 比较难的一个例子
查看>>
第三次作业 105032014021
查看>>
记录一些容易忘记的属性 -- UILabel
查看>>
android新手关于左右滑动的问题,布局把<android.support.v4.view.ViewPager/><ImageView/> 放在上面就不行了。...
查看>>
人脸识别FaceNet+TensorFlow
查看>>
STL之map UVa156
查看>>
从Angular.JS菜鸟到专家
查看>>
再谈Vmware NAT的配置和路由流程
查看>>
javaScript数组去重方法汇总
查看>>
评价意见整合
查看>>
MySQL表的四种分区类型
查看>>