来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/search-a-2d-matrix-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
解答
/*** @param {number[][]} matrix* @param {number} target* @return {boolean}*/const binarySearch = (arr, val) => {if (!arr || !arr.length) return false;let mid = arr.length >> 1;let midVal = arr[mid];if (midVal === val) {return true;} else if (midVal < val) {return binarySearch(arr.slice(mid + 1), val);} else {return binarySearch(arr.slice(0, mid), val);}}var searchMatrix = function(matrix, target) {if (!matrix || !matrix.length) return false;let min = matrix[0][0];const lastLine = matrix[matrix.length - 1];let max = lastLine[lastLine.length - 1];if (target === min || target === max) {return true;}if (target > min && target < max) {for (let i = 0; i < matrix.length; i++) {const linei = matrix[i];if (linei[0] <= target) {const last = linei[linei.length - 1];if (last === target) {return true;}if (last < target) {continue;}let isHit = binarySearch(matrix[i], target);if (isHit) return true;}}}return false};
