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

题目描述:

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

解题思路:

· 采用二分查找法,时间复杂度为O(max(m,n))。

· 先将给定的值key与二维数组右上角的元素比较:若相等,则返回true;若key小于它,则最后一列的元素肯定都大于key,此时可以删除掉最后一列;而若key大于它,则第一行的元素肯定都小于key,此时可以删除掉第一行,依次向下比较,如果比较到了左下角的元素,还没有发现等于key的,则返回fasle。

二维数组中的查找
参考代码
bool Find(int *arr, int rows, int cols, int key)
{
    int row = 0;
    int col = cols - 1;
    if ((arr != NULL) && (rows > 0 && cols > 0))//判断是否是空数组
    {
        while (row<rows&&col >= 0)//循环直到排除完
        {
            if (arr[row*cols + col] == key)//右上角等于key
            {
                return true;
            }
            else if (arr[row*cols + col] > key)
                --col; //右上角>key,剔除一列
            else
                row++;//否则换下一行
    }
        return false;//未找到
}
参考链接

【剑指offer】二分查找二维数组 | 经典面试题——二维数组查找

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输...
    minningl阅读 471评论 0 0
  • 数组 记录《剑指offer》中所有关于数组的题目,以及LeetCode中的相似题目 相关题目列表 说明 由于简书...
    wenmingxing阅读 1,536评论 1 12
  • 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到...
    Observer_____阅读 3,022评论 0 1
  • 数组的相关算法要简单一些,之前写过的和现在遇到的整理了一下。 数组:数组是较为简单的数据结构,它占据一块连续的内存...
    zero_sr阅读 1,358评论 0 2
  • 1.感恩婆婆早早起床为我们做手工油饼,红豆粥,并配有爽口有小菜,提前烧开一大壶开水晾好,让我们起床后先喝温开水排肠...
    金刚家人阅读 126评论 0 0