[算法][LeetCode]Search a 2D Matrix——二维数组的二分查找
2013-11-01 21:25
417 查看
题目要求
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.
分析
一开始写的时候把他拆分成了两个二分查找,先纵向找,再横向找。纵向的二分查找比较复杂,要确定是在某个坐标上,或者在两个坐标之间。后来找到一个更好的方法,就是把二维数组的坐标转化成一位数组,整体进行二分查找,程序更简单,复杂度也更低了。
Java代码
public boolean searchMatrix(int[][] matrix, int target) { if (matrix.length == 0 || matrix[0].length == 0) { return false; } int xLength = matrix[0].length; int min = 0; int max = matrix[0].length * matrix.length - 1; int x, y, current; while (min <= max) { current = (min + max) / 2; y = current / xLength; x = current % xLength; if (matrix[y][x] == target) { return true; } else if (target < matrix[y][x]) { max = current - 1; } else { min = current + 1; } } return false; }
相关文章推荐
- [算法][LeetCode]Search a 2D Matrix——二维数组的二分查找
- leetcode 74. Search a 2D Matrix-矩阵搜索|二分查找
- Leetcode 二分查找 Search a 2D Matrix
- leetcode-二分查找:Search a 2D Matrix
- 二维数组中的查找(LeetCode: 74. Search a 2D Matrix)
- [LeetCode] Search a 2D Matrix(二分查找)
- LeetCode-74-Search a 2D Matrix(二分查找)-Medium
- Search a 2D Matrix:二分查找二维数组
- leetcode:Search a 2D Matrix(数组,二分查找)
- [LeetCode] 74 Search a 2D Matrix(二分查找)
- 【LeetCode】Search a 2D Matrix && 【九度】题目1384:二维数组中的查找
- Leetcode 二分查找 Search a 2D Matrix
- 剑指offer 面试题3:二维数组(矩阵)中数的查找(leetcode 74. Search a 2D Matrix) 题解
- Leetcode刷题记—— Search a 2D Matrix(在二维数组里查找)
- Search a 2D Matrix,在有序矩阵查找,二分查找的变形; 行有序,列有序查找。
- Leetcode 74. Search a 2D Matrix 2D矩阵查找 解题报告
- [LeetCode]—Search a 2D Matrix 有序二维矩阵中查找目标值
- leetcode——Search a 2D Matrix 二维有序数组查找(AC)
- [leetcode] 【查找】 74. Search a 2D Matrix
- Leetcode 74 Search a 2D Matrix 有序二维数组二叉查找