• 剑指offer 面试题4:二维数组中的查找


    题目描述

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

    编程思想

    首先选取数组中右上角(或者左下角)的数字,如果该数字等于要查找的数字则返回true,如果该数字大于要查找的数字则提出该数字所在列,如果该数字小于要查找的数字则提出该数字所在行。以此类推,可以缩小查找范围,直到查找成功或者查找范围为空。

    编程实现

    class Solution {
    public:
        bool Find(int target, vector<vector<int> > array) {
            int rowCnt = array.size();    //矩阵的行数
            int colCnt = array[0].size();    //矩阵的列数
            bool found = false;
            if(rowCnt > 0 && colCnt > 0)
            {
                int row = 0;
                int col = colCnt - 1;
                while(row <= rowCnt-1 && col >= 0)    //注意这里的临界条件
                {
                    if(array[row][col] == target)
                    {
                        //如果给的指向二位数组的指针的话
                        //array[row * colCnt + col]
                        found = true;
                        break;
                    }
                    else if(array[row][col] > target)
                    {
                        --col;
                    }
                    else
                    {
                        ++row;
                    }
                }
            }
            return found;
        }
    };
     

    题目总结

    不能选择左上角的数字或者右下角的数字。

  • 相关阅读:
    android实现 服务器功能
    jQuery部分源码帮助理解
    jquery 2.0.3代码结构
    Mac下配置JAVA_HOME
    用户环境变量
    你的apk有多不安全
    JadClipse eclipse反编译插件
    vim 使用笔记
    Makefile简易模板
    Linux watch 监控系统状态
  • 原文地址:https://www.cnblogs.com/parzulpan/p/11256202.html
Copyright © 2020-2023  润新知