Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 010d4a8

Browse files
Create Search-a-2D-Matrix.js (ignacio-chiazzo#15)
1 parent ddd253b commit 010d4a8

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
/*
2+
https://leetcode.com/problems/search-a-2d-matrix/description/
3+
4+
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
5+
6+
Integers in each row are sorted from left to right.
7+
The first integer of each row is greater than the last integer of the previous row.
8+
Example 1:
9+
10+
Input:
11+
matrix = [
12+
[1, 3, 5, 7],
13+
[10, 11, 16, 20],
14+
[23, 30, 34, 50]
15+
]
16+
target = 3
17+
Output: true
18+
Example 2:
19+
20+
Input:
21+
matrix = [
22+
[1, 3, 5, 7],
23+
[10, 11, 16, 20],
24+
[23, 30, 34, 50]
25+
]
26+
target = 13
27+
Output: false
28+
*/
29+
30+
/**
31+
* @param {number[][]} matrix
32+
* @param {number} target
33+
* @return {boolean}
34+
*/
35+
36+
var searchMatrix = function(matrix, target) {
37+
if(matrix.length === 0)
38+
return false;
39+
40+
var minRow = 0;
41+
var maxRow = matrix.length - 1;
42+
var minCol = 0
43+
var maxCol = matrix[0].length - 1;
44+
45+
const row = findRow(matrix, target, maxCol, minRow, maxRow);
46+
const col = findColumn(matrix, target, row, minCol, maxCol);
47+
48+
return target === matrix[row][col];
49+
};
50+
51+
var findRow = function(matrix, target, maxCol, minRow, maxRow) {
52+
while(minRow < maxRow) {
53+
var midRow = Math.floor((minRow + maxRow) / 2);
54+
if(matrix[midRow][0] <= target && matrix[midRow][maxCol] >= target) {
55+
return midRow;
56+
} if(matrix[midRow][0] < target)
57+
minRow = midRow + 1;
58+
else {
59+
maxRow = midRow - 1;
60+
}
61+
}
62+
63+
return minRow;
64+
}
65+
66+
var findColumn = function(matrix, target, row, minCol, maxCol) {
67+
while(minCol < maxCol) {
68+
const midCol = Math.floor((minCol + maxCol) / 2);
69+
if(matrix[row][midCol] == target) {
70+
return midCol;
71+
} else if(matrix[row][midCol] < target)
72+
minCol = midCol + 1;
73+
else {
74+
maxCol = midCol - 1;
75+
}
76+
}
77+
78+
return minCol;
79+
}
80+
81+
var main = function(){
82+
const matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,50]];
83+
console.log(searchMatrix(matrix, 3));
84+
}
85+
86+
main();
87+
module.exports.main = main;

0 commit comments

Comments
 (0)