0
点赞
收藏
分享

微信扫一扫

二维数组中的查找(二分查找)

兽怪海北 2022-04-29 阅读 55
算法

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

 

示例:

 

现有矩阵 matrix 如下:

[

  [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。

 

解题思路:因为每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,所以可以从数组的左下角(或右上角)开始查找。因为示例一的左下角是该列的最大值,也是该行的最小值,所以可以用二分查找。把该元素和target比较,如果该元素小于target,说明target一定不在该列,则该元素的列数+1,消掉了该列。如果该元素大target,说明target一定不在该行,该元素的行数-1。

如果相等,返回true,说明target在数组中。

 

算法流程:

1.定义数组的左下角元素的行数位i,列数为j

2.遍历整个数组

               如果该元素大于target

                       i - - ;

               如果该元素小于target

                       j++;

               如果该元素等于target

                      返回true

3.返回false 

 

代码:

 

class Solution {
public:
    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
        

// 第一步
    int i=matrix.size()-1,j=0;

 

// 第二步
    
    while(i>=0&&j<matrix[0].size()) {
        
        if(matrix[i][j]>target)
            i--;
            
        else if(matrix[i][j]<target)
            j++;
            
        else return true;
        
    }

 

//第三步
    
    return false;
    }
};

 

举报

相关推荐

二维数组中的查找

[数组]二分查找

数组线性查找和二分查找

二维数组查找元素

查找-二分查找

0 条评论