首页 > 试题广场 >

矩阵查找

[编程题]矩阵查找
  • 热度指数:20057 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
请写出一个高效的在m*n矩阵中判断目标值是否存在的算法,矩阵具有如下特征:
每一行的数字都从左到右排序
每一行的第一个数字都比上一行最后一个数字大
例如:
对于下面的矩阵:
[
    [1,   3,  5,  9],
    [10, 11, 12, 30],
    [230, 300, 350, 500]
]
要搜索的目标值为3,返回true;
示例1

输入

[[1,3,5,9],[10,11,12,30],[230, 300, 350, 500]],3

输出

true
头像 ajaj
发表于 2021-07-08 23:02:18
精华题解 思路: 从题中给出的有效信息有两点: 每一行的数字都从左到右递增 每一行的第一个数字都比上一行最后一个数字大 故此此矩阵是有序的,可以使用传统的二分查找进行取值。 方法一:两次二分查找 具体做法:我们可以先通过二分查找确定 行,再对该 行 继续进行二分查找 ,思维较为常见,不做过多解读 impo 展开全文
头像 Double厚
发表于 2020-10-27 19:20:56
算法: 从右上角开始找,左边的都是比它小的,下边的都是比它大的。 如果当前元素等于target,那么说明找到了,返回true; 如果当前元素大于target,那么当前元素下面的一定都比target大,所以左移; 如果当前元素小于target,那么当前元素左面的一定都比target小,所以下移; 如 展开全文
头像 华科不平凡
发表于 2020-09-03 16:01:46
本篇内容虽多,但有助于系统构建对二分查找的知识体系,如果您还不能闭着眼睛写二分的话,建议仔细看看哦~ 二分查找是一个思路很简单、但实现起来有点恼人的算法。正所谓知己知彼,胜乃不怠;知天知地,胜乃不穷,我们先对二分法这个“敌人”做一个简单的分类: 按查找区间分类——闭区间[..]和左闭右开区间[. 展开全文
头像 LifelongCode
发表于 2021-01-22 14:20:11
解法1:从右上角开始找,左边的都是比它小的,下边的都是比它大的。 如果当前元素等于target,那么说明找到了,返回true; 如果当前元素大于target,那么当前元素下面的一定都比target大,所以左移; 如果当前元素小于target,那么当前元素左面的一定都比target小,所以下移; 如 展开全文
头像 0offer种子选手
发表于 2021-06-15 15:16:59
首先强烈建议自己手写一边二分查找 虽然我还没手写,提交这个题解马上就去写。可以上leetcode上写这道题。704 leetcode标准二分查找 其次,API是真的香。Arrays.binarySearch()真的好用! 怀疑大佬们的编码能力?还是不相信大佬们的API效率呢? int mid 展开全文
头像 ivansli
发表于 2021-04-22 15:19:17
go实现 从右上角开始比较 func searchMatrix( matrix [][]int , target int ) bool { // write code here if len(matrix) == 0 { return false } 展开全文
头像 JZZZZZZZZZZZ
发表于 2020-12-25 20:24:11
这道题本质还是二分查找,和普通的有所不同的是要进行两次。因为每列每行都是有序的,所以在定位行以后再定位列。 function searchMatrix( matrix , target ) { // write code here let up = 0,down = matrix. 展开全文

问题信息

难度:
93条回答 27544浏览

热门推荐

通过挑战的用户

查看代码