二维矩阵中数据查找(线性查找法O(M+N))

84 篇文章 3 订阅
75 篇文章 0 订阅

在这里插入图片描述
java实现:

具体思路:

从二维数组的右上角开始查找。如果当前元素的值等于目标值,则返回 true。如果当前元素大于目标值,则向左移。如果当前元素小于目标值,则向下移。

我们来这种方法不会错过目标值。

如果当前元素大于目标值,说明当前元素的下边的所有元素都一定大于目标值,因此往下查找不可能找到目标值,往左查找可能找到目标值。

如果当前元素小于目标值,说明当前元素的左边的所有元素都一定小于目标值,因此往左查找不可能找到目标值,往下查找可能找到目标值。

选左上角,往右走和往下走都增大,不能选

选右下角,往上走和往左走都减小,不能选

选左下角,往右走增大,往上走减小,可选

选右上角,往下走增大,往左走减小,可选

时间复杂度:O(n+m)O(n+m)。访问到的下标的行最多递增 n 次,列最多递减 m 次,最多从右上角访问到左下角,因此循环体最多执行 n + m 次。

class Solution {
    public boolean findNumberIn2DArray(int[][] matrix, int target) {
    if(matrix.length==0)return false;
    int m=matrix.length,n=matrix[0].length;
    int i=0,j=n-1;
    while(i<m&&j>=0){  
        if(matrix[i][j]==target)return true;
        else if(matrix[i][j]<target)i++;
        else j--;
    }
    return false;
    }
}

C++实现只需要吧length函数改成size()即可

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 如果你是指在一个一维矩阵(即向量)找到某一元素所在的位置,可以使用以下方: 1. 遍历整个向量,逐个比较元素与目标元素是否相等,直到找到目标元素,返回其位置。 2. 使用线性查找,从向量的间元素开始比较,如果目标元素小于间元素,则在向量的左半部分查找,否则在右半部分查找,直到找到目标元素或者向量为空,返回其位置或者不存在的标识。 3. 使用二分查找,与线性查找类似,但是每次查找都将向量分成两部分,可以更快地找到目标元素。该算要求向量必须是有序的。 如果你是指在一个二维矩阵找到某一元素所在的列,可以使用以下方: 1. 遍历整个矩阵,逐行比较元素与目标元素是否相等,如果相等则返回该元素所在的列。 2. 如果二维矩阵是有序的,可以使用二分查找,在每行查找目标元素,直到找到为止,返回该元素所在的列。 ### 回答2: 要在一维矩阵找到某一元素所在的列,我们首先需要确定矩阵的行数和列数。 在一维矩阵,元素按照一行排列,没有列的概念,因此无通过列来定位元素。 一维矩阵可以看作是一个一行多列的矩阵,所以元素的位置只能通过索引来确定。索引是元素在矩阵的位置标记,可以通过索引来找到某一元素所在的列。 假设我们要找到元素x在一维矩阵所在的列。我们可以遍历整个矩阵,从第一个元素开始逐个判断是否为x。如果找到了x,则可以通过索引来确定它所在的列。 具体的方可以是使用一个循环,从第一个元素开始逐个比较,直到找到目标元素x。在循环,每次比较当前元素是否为x,如果是,则输出该元素的索引值,即确定了x所在的位置。 但需要注意的是,由于一维矩阵只有一行多列的特点,所以无论找到的元素在哪个位置,其所在的列始终为1。 总结来说,对于一维矩阵找到某一元素所在的列,我们需要遍历整个矩阵,通过索引来确定元素所在的位置,但由于一维矩阵的特点,元素始终在第一列。 ### 回答3: 在一维矩阵找到某一元素所在的列,意味着在一维矩阵查找该元素所在的位置。 首先,我们需要遍历整个一维矩阵,从左到右逐个比较元素,直到找到目标元素。在遍历的过程,我们可以使用一个计数器来记录当前所在的列数,初始为1。 当找到目标元素时,我们就可以得到该元素所在的列数。此时,我们可以结束遍历,将所得到的列数输出。 如果在遍历过程没有找到目标元素,则说明目标元素不在矩阵,我们可以输出一个特定的值,表示目标元素不存在的情况。 总结一下,找到某一元素所在的列,需要遍历一维矩阵,逐个比较元素,当找到目标元素时,记录当前的列数并输出;如果遍历完整个矩阵仍未找到目标元素,则输出表示目标元素不存在的特定值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值