Search a 2D Matrix
来源:互联网 发布:西门子数控仿真软件 编辑:程序博客网 时间:2024/05/23 14:33
Search a 2D Matrix
我的思路:
1、在一个排好序的二维数组中找目标数,返回成功或者失败。
2、二分查找,首先在列上找值,定位到哪一行之后,在行内二分查找。复杂度是log(n) + log(m)。
代码如下:
bool searchMatrix(vector<vector<int> > &matrix, int target) { int n = matrix.size(); int m = matrix[0].size(); int i = 0; int j = n - 1; int mid1; while (i <= j) { mid1 = (j - i) / 2 + i; if (target < matrix[mid1][0]) j = mid1 - 1; else if (target > matrix[mid1][m - 1]) i = mid1 + 1; else break; } if (mid1 >= 0 && mid1 < n) { int g = 0; int h = m - 1; while (g <= h) { int mid = (h - g) / 2 + g; if (matrix[mid1][mid] < target) g = mid + 1; else if (matrix[mid1][mid] > target) h = mid - 1; else return true; } } return false; }
我的思路2:
1、剑指Offer上的第3题就是这个,看了那边的思路之后,自己写了一个,结果比上面的那个运行速度还要快。
代码如下
bool searchMatrix(vector<vector<int> > &matrix, int target) { int i = 0, j = matrix[0].size() - 1; while (i < matrix.size() && j > -1) { if (matrix[i][j] > target) j--; else if (matrix[i][j] < target) i++; else return true; } return false; }
别人思路:
1、既然都是有序的,那么将二维数组看作一维的来处理,也会加快速度,而且代码会简洁很多,二维到一维的转换只需要使用除法和取余就可以了。
0 0
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D matrix
- Search a 2D matrix
- Linux内核数据包处理流程-数据包接收
- Objective-C 学习笔记 11 - 属性Property
- RDIFramework.NET ━ 9.14 数据库连接管理 ━ Web部分
- poj_2632
- POJ 2392 Space Elevator
- Search a 2D Matrix
- 栈建立,十进制转换为二进制
- android客户端向服务器通信的三种方式的使用
- 不安装Oracl 客户端登陆PLSQL 的方法
- 怎么清理c盘垃圾(有图教你c盘清理)
- codefores #267C George and Job(dp)
- 密码学笔记
- CSS之文本效果
- Swift开发的几个小技巧