剑指 Offer 04. 二维数组中的查找
题目链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/
本文基于JavaScript语言的解法:一、接口方法解决 二、二分搜索树解法【巧妙】
一、接口方法解决
Array.ptototype.includes()
: 用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true
,否则返回 false
。
1 /** 2 * @param {number[][]} matrix 3 * @param {number} target 4 * @return {boolean} 5 */ 6 var findNumberIn2DArray = function(matrix, target) { 7 for(let i = 0; i < matrix.length; i++) { 8 if(matrix[i].includes(target)) return true; 9 } 10 return false; 11 };
二、二分搜索树解法【巧妙】
题目描述的二维数组的规则:每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
稍微将左图转一下-->右图:就是一棵左小右大的二分搜索树了。
1 /** 2 * @param {number[][]} matrix 3 * @param {number} target 4 * @return {boolean} 5 */ 6 var findNumberIn2DArray = function (matrix, target) { 7 if(matrix == null || matrix[0] == null) return false; 8 let length = matrix.length; 9 let i = 0; 10 let j = matrix[0].length - 1; 11 while(i < length && j >= 0){ 12 if(target == matrix[i][j]) return true; 13 if(target > matrix[i][j]) i++; 14 else j--; 15 } 16 return false; 17 };