美文网首页
2017/05/11 二维数组查找

2017/05/11 二维数组查找

作者: 进击的NickMao | 来源:发表于2017-05-11 22:38 被阅读27次

题目搬运:

例如下面的二维数组,每行每列都是递增,如果在数组中查找数字7,则返回true;如果查找5,因为5不存在,则返回false:

1   2   8   9
2   4   9   12
4   7   10   13
6   8   11   15

思路

既然是查找,有序列表一般最有效率的查找是二分查找,然后二维数组的所谓分界点,其实就是角落的点,那么选择哪个角呢?
比如右上角,所有同行的值,都比他小,所有同列的值,都比他大;比如左下角,所有同列值,都比他小,所有同行的值,都比他大;似乎想到了什么?对,快速排序,有了不同方向的比较,就有了递归。
假设选取右上角,如果刚好是所查找的值,返回ture;如果不是,比较查找的值,如果比右上角的值小,例如7,则删除最后一列,继续比较右上角的值,即8;如果比右上角的值大,例如11,则删除最上一行,继续比较右上角的值,即12;查找到即递归结束,或者遍历完直到左下角。

解决

以C艹为例:

using namespace std;  
bool Find(int arr[MAXLEN][MAXLEN],int num,int x,int y,int nLen)
 //MAXLEN最大维度  nLen数组维度 num待查找值
{  
    if (x > nLen - 1 || y < 0)  
    {  
        return false;  
    }  
    if (arr[x][y] == num)  
    {  
        cout<<"x = "<<x<<" y = "<<y<<endl;  
        return true;  
    }  
    else if (arr[x][y] > num)  
    {  
        return Find(arr,num,x,y - 1,nLen);  
    }  
    else   
    {  
        return Find(arr,num,x + 1,y,nLen);  
    }  
}   

相关文章

  • 2017/05/11 二维数组查找

    题目搬运: 例如下面的二维数组,每行每列都是递增,如果在数组中查找数字7,则返回true;如果查找5,因为5不存在...

  • 剑指Offer(一)

    题目汇总03.数组中重复的数字(简单),本题考查数组04.二维数组中的查找(简单),本题考查数组05.替换空格,本...

  • 算法题

    行列都是有序的二维数组,查找k是否存在【查找法】 二维数组中的查找(行列分别有序数组的二分查找)【递归法】 快速排...

  • 剑指Offer二维数组查找

    剑指Offer二维数组查找 二维数组查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到...

  • 剑指Offer 练习

    剑指Offer 算法练习 03.数组中重复的数字 04.二维数组的查找 05.替换空格 06.从尾到头打印链表 0...

  • 剑指offer4.二维数组中的查找

    题目 题目分析 算法-二维数组中的查找 比如一个二维数组是这样: 要查找数组7在不在数组内,根据前人总结出来的规律...

  • OC各种算法,排序,查找实现

    二维数组查找数字的OC实现 OC 二分查找的实现 快速排序

  • 2019-08-07 B1004 成绩排名

    这道题用之前的二维数组的思路是不对的,因为这道题并不是对二维数组进行查找操作而是需要对二维数组进行遍历操作,因此我...

  • 第08天C语言(00):笔记总结

    01-二维数组-基本概念 02-二维数组-注意点 03-二维数组和函数 04-字符串-基本概念 05-字符串-常用...

  • 《剑指offer》(一)-二维数组中的查找(java)

    数组--二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序...

网友评论

      本文标题:2017/05/11 二维数组查找

      本文链接:https://www.haomeiwen.com/subject/kpeatxtx.html