<剑指Offer>面试题4: 二维数组中的查找

题目描述 牛客网

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

解题思路

  • 思路一 剑指Offer 45
  • 思路二迭代

代码

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        if(array.empty()){
            return false;
        }
        
        int rows = array.size();
        int cols = array[0].size();
        
        // 从右上角开始向左下方查找
        int i = 0;
        int j = cols - 1;
        while(i < rows && j >= 0){
            if(array[i][j] == target){
                return true;
                break;
            }
            else if(array[i][j] < target){
                i++;
            }
            else{
                j--;
            }
        }
        return false;
    }
};

总结展望

  • c++不熟练...

遗留问题

  • 下面代码,左思右想没问题,没想到竟然报错,留待以后解决吧
  • 目前想法是有可能递归太多导致超时
class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        if(array.empty()){
            return false;
        }
        
        int rows = array.size();
        int cols = array[0].size();
        return core(0, 0, rows, cols, array, target);
    }
    
    bool core(int x, int y, int rows, int cols, vector<vector<int> >& array, int target){
        bool you = false;
        bool xia = false;
        
        if(array[x][y] == target){
            return true;
        }
        else{
            // 向右
            if(y+1 < cols && array[x][y] < target){
                you = core(x, y+1, rows, cols, array, target);
            }

            // 向下
            if(x+1 < rows && array[x][y] < target){ 
                xia = core(x+1, y, rows, cols, array, target);
            }
            return you || xia;
        }
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容