剑指Offer04.二维数组中的查找(BST)
思路:这题乍看上去好像是一个二分,其实上有更优的解法,由于从右上角往左下角看刚好是一颗二叉搜索树的形状,因此可以把这个二维数组看作是一个BST,因此解法就是BST的查找功能在此数组中的实现,将右上角元素看为根节点,从根节点开始,如果当前元素小于目标元素则找他的左子树,大于则找他右子树,否则就说明找到了,如果一直到数组越界都没有找到说明BST中不存在这个数。
参考代码

1 public boolean findNumberIn2DArray(int[][] matrix, int target) { 2 int maxY = matrix.length; 3 int maxX = 0; 4 if(maxY > 0) { 5 maxX = matrix[0].length; 6 } 7 boolean flag = false; 8 int x = maxX - 1, y = 0; 9 while(x >= 0 && y < maxY) { 10 if(matrix[y][x] > target) { 11 x --; 12 } else if(matrix[y][x] < target) { 13 y ++; 14 } else { 15 flag = true; 16 break; 17 } 18 } 19 return flag; 20 }
时间并不会因为你的迷茫和迟疑而停留,就在你看这篇文章的同时,不知道有多少人在冥思苦想,在为算法废寝忘食,不知道有多少人在狂热地拍着代码,不知道又有多少提交一遍又一遍地刷新着OJ的status页面……
没有谁生来就是神牛,而千里之行,始于足下!
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步