剑指offer-3.二维数组中查找

Posted perfy576

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer-3.二维数组中查找相关的知识,希望对你有一定的参考价值。

0 题目

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列按照从上到下递增顺序排序

请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有这个整数。

1 分析

凡是数组有序的首先要想到的是二分查找。

这个二维数组的特点在于,数组中某个点,在该点,右、下方的数都比该数大。左、上的都比该数小。

但是同时判断两个相同维度,比较麻烦。

因此先判断两个不同的维度。也就是说,判断某个点右面和下面,或是左面和上面。那么其中一个方向是大的,另一个方向是小的。

以判断右面和下面为例:

去左上的点开始,首先,如果目标数比当前点大,那么向下移动,如果比目标点小,那么向右面移动,此时点的右下就是带选择的区域,坐下就是筛选过的区域

bool find(int target, vector<vector<int>> array)
{
    size_t rows = array.size();
    if (rows == 0)
    {
        return false;
    }
    size_t cols = array[0].size();
    if (cols == 0)
    {
        return false;
    }

    // col,和row 是右上的点
    int col = cols - 1;
    int row = 0;

    // 点向左下移动,因此,col>=0, row < rows
    while (col >= 0 && row < rows)
    {
        if (target == array[row][col])
        {
            return true;
        }
        else if (target < array[row][col]) // 大于,向下移动
        {
            --col;
        }
        else if (target > array[row][col]) // 小于,向左移动
        {
            ++row;
        }
    }
    return false;
}

  

 

以上是关于剑指offer-3.二维数组中查找的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer04二维数组中的查找

Java 剑指offer 二维数组中的查找

[剑指Offer]5.二维数组中的查找

剑指offer-2(二维数组中的查找)

剑指Offer——二维数组中的查找

[剑指offer] 二维数组中的查找