-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathSearch2DMatrix.java
More file actions
35 lines (32 loc) · 1.31 KB
/
Search2DMatrix.java
File metadata and controls
35 lines (32 loc) · 1.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package matrix;
//Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has properties:
//1) Integers in each row are sorted from left to right. 2) 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.
//You may try to solve this problem by finding the row first and then the column.
//There is no need to do that. Because of the matrix’s special features, the matrix can be considered
//as a sorted array. Your goal is to find one element in this sorted array by using binary search.
public class Search2DMatrix {
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix==null || matrix.length==0 || matrix[0].length==0)
return false;
int m = matrix.length;
int n = matrix[0].length;
int start = 0;
int end = m*n-1;
while(start<=end){
int mid=(start+end)/2;
int midX=mid/n;
int midY=mid%n;
if(matrix[midX][midY]==target)
return true;
if(matrix[midX][midY]<target){
start=mid+1;
}else{
end=mid-1;
} }
return false; }
}