Skip to the content.

二维数组中的查找


Contact me:

Blog -> https://cugtyt.github.io/blog/index
Email -> cugtyt@qq.com
GitHub -> Cugtyt@GitHub


来自牛客 剑指offer

题目描述

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

简单解法

bool find(int target, vector<vector<int> > array) {
    // 检查边界
    if (array.size() <= 0 || array[0].size() <= 0) {
        return false;
    }
    // 遍历
    int row = array.size();
    int col = array[0].size();
    for (int i = 0; i < row; ++i)
    {
        for (int j = 0; j < col; ++j) {
            if (array[i][j] == target)
            {
                return true;
            }
            else if (array[i][j] < target)
            {
                ++i;
            }
            else
            {
                --j;
            }
        }
    }
    return false;
}

利用数组特点,具体见《剑指offer》

bool find(int target, vector<vector<int> > array) {
    if (array.size() <= 0 || array[0].size() <= 0) {
        return false;
    }
    int row = array.size();
    int col = array[0].size();
    // 从右上角开始,比目标小,增加行,比目标大,减小列
    for (int i = 0, j = col - 1; i < row && j >= 0;)
    {
        if (array[i][j] == target)
        {
            return true;
        }
        else if (array[i][j] < target)
        {
            ++i;
        }
        else
        {
            --j;
        }
    }
    return false;
}