来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/search-a-2d-matrix-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。

解答

  1. /**
  2. * @param {number[][]} matrix
  3. * @param {number} target
  4. * @return {boolean}
  5. */
  6. const binarySearch = (arr, val) => {
  7. if (!arr || !arr.length) return false;
  8. let mid = arr.length >> 1;
  9. let midVal = arr[mid];
  10. if (midVal === val) {
  11. return true;
  12. } else if (midVal < val) {
  13. return binarySearch(arr.slice(mid + 1), val);
  14. } else {
  15. return binarySearch(arr.slice(0, mid), val);
  16. }
  17. }
  18. var searchMatrix = function(matrix, target) {
  19. if (!matrix || !matrix.length) return false;
  20. let min = matrix[0][0];
  21. const lastLine = matrix[matrix.length - 1];
  22. let max = lastLine[lastLine.length - 1];
  23. if (target === min || target === max) {
  24. return true;
  25. }
  26. if (target > min && target < max) {
  27. for (let i = 0; i < matrix.length; i++) {
  28. const linei = matrix[i];
  29. if (linei[0] <= target) {
  30. const last = linei[linei.length - 1];
  31. if (last === target) {
  32. return true;
  33. }
  34. if (last < target) {
  35. continue;
  36. }
  37. let isHit = binarySearch(matrix[i], target);
  38. if (isHit) return true;
  39. }
  40. }
  41. }
  42. return false
  43. };