本题旨在分享刷Leecode过程中发现的一些有趣或有价值的想法。[当然答案是基于js的]。题目相关原题地址:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/题目描述:在一个n*m的二维数组中,每一行从左到右递增排序,每一列从上到下递增排序。请完成一个高效的函数,输入这样一个二维数组和一个整数,判断数组中是否包含整数。现有矩阵如下:[[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]]给定target=5,返回true。给定target=20,返回false。约束0<=n<=10000<=m<=1000思路分析首先,暴力破解肯定是最容易想到的,但显然是错误的。如果是暴力破解,最坏情况的复杂度是m*n>1000000(如果可以使用暴力,题中设置的单调递增条件是没有意义的,如果面试答案是暴力破解的,估计是面试官有这样的表达:)然后:其次,考虑如何利用单调性,如果是一维数组,很容易想到二分法,但是这是二维数组,这个思路显然不行不行。这个不行,那个也不行。那么最后只能从树上考虑了。注意题目设置中写的数组的规则是:每一行从左到右递增,每一列从上到下递增,所以很明显(易知(#^.^#)),假设将右上角的元素看做是一棵树的根节点,那么以此为基础,向左查找依次递减,向底部查找依次递增,如下:Didyoufoundanything?(辛吉次,哇,一次摸嗨好多次!)这是一棵二叉搜索树!当然,可能有同学不知道什么是二叉查找树,问题不大。简单地说,每个节点的左孩子必须小于它的右孩子。然后解决方案将在纸上栩栩如生!从右上节点开始查找(左下角也可以,同理):如果target
