码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-03-14 18:09:43      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:bsp   筛选   剑指offer   target   offer   排序   gpo   数组   class   

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.二维数组中查找

标签:bsp   筛选   剑指offer   target   offer   排序   gpo   数组   class   

原文地址:https://www.cnblogs.com/perfy576/p/8560325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!