【发布时间】:2017-08-25 05:46:14
【问题描述】:
编写一个高效的算法,在 m x n 中搜索一个值 矩阵。
此矩阵具有以下属性:
- 每行中的整数从左到右排序。
-第一个整数 每行大于或等于最后一个整数 上一行。
示例:考虑以下矩阵:
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
给定 target = 3,返回1(1对应true)返回 0 / 1 ( 如果元素不存在则返回 0,如果元素存在则返回 1 present ) 解决这个问题
我的解决方案适用于 NetBeans,但在网站上失败。任何帮助将不胜感激。 https://www.interviewbit.com/problems/matrix-search/
public class Solution {
public int searchMatrix(ArrayList<ArrayList<Integer>> a, int b) {
int r = a.size();
int c = a.get(0).size();
int start = 0;
int end = r - 1;
// default value is last row for edge case
int biRow = r -1; // row to search column
//binary search 1st value of rows
while (start <= end) {
int mid = (start + end) / 2;
if (b == a.get(mid).get(0)) {
return 1;
}
if (a.get(mid).get(0) < b && b < a.get(end).get(0)) {
if (mid + 1 >= end) {
biRow = mid;
break;
}
} if (b < a.get(mid).get(0)) {
end = mid - 1;
} else {
start = mid + 1;
}
}
//binary search column of biRow
start = 0;
end = c-1;
while (start <= end) {
int mid = (start + end) / 2;
if (b == a.get(biRow).get(mid)) {
return 1;
}
if (b < a.get(biRow).get(mid)) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return 0;
}
}
【问题讨论】:
-
只需将NxM矩阵视为N*M项的数组,具有明显的顺序,并通过坐标变换对其进行普通的二分搜索。
标签: algorithm matrix binary-search