標籤:
Search a 2D Matrix
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.
https://leetcode.com/problems/search-a-2d-matrix/
雖然是個二維數組,但是有序,當成一維數組二分,計算出row和col的下標。
如果錯用兩次二分,一次做行一次做列,寫起來就很複雜了。
1 /** 2 * @param {number[][]} matrix 3 * @param {number} target 4 * @return {boolean} 5 */ 6 var searchMatrix = function(matrix, target) { 7 var m = matrix.length, n = matrix[0].length; 8 var i = 0, j = m * n - 1, middle, row, col, curr; 9 while(i <= j){10 middle = parseInt((i + j) / 2);11 row = parseInt(middle / n);12 col = middle % n;13 curr = matrix[row][col];14 if(target === curr){15 return true;16 }17 18 if(target > curr){19 i = middle + 1; 20 }else{21 j = middle - 1;22 } 23 }24 return false;25 };
[LeetCode][JavaScript]Search a 2D Matrix