• 剑指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;
    }
    

      

  • 相关阅读:
    文本文件、二进制文件
    trunc()
    字符集、编码
    windows注册表:扫盲
    decode() & sign()
    移动前端工作的那些事前端制作之自适应制作篇
    css hack知识详解
    IE6兼容性大全
    JS正则匹配入门基础!
    [转载]Javascript中批量定义CSS样式 cssText属性
  • 原文地址:https://www.cnblogs.com/perfy576/p/8560325.html
Copyright © 2020-2023  润新知