• 剑指offer 二维数组中的查找


    问题描述

    在一个二维数组中,每一行都是按照从左往右递增的顺序排序,每一列都是按照从上往下递增的顺序排序。请完成一个函数,输入这样一个二维数组和整数,判断数组是否有改整数。
            例如:下面的二位数组都是每行梅列递增,如果在这个数组中查找数字7,如果有就返回true,如果没有就返回fasle。


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

    解题思路

    1.选取数组的右上角的数字比交,9比7大,那么9这一列中9最小都没有比7小那么,在这一列中没有比7小的了。那么这一行可以不考虑了,剔除掉9所在这一列(图a)。看剩下的,最右上角,那么就是不8,同理剔除8所在的这一列(图b),剩下的就是这个右上角是2,明显比7小,那么在剔除完,其余的后,发现,第一列中2最大,最大的数没有7大,那么这一行也可以剔除(图c)第二行,此时,数组中只剩下了四个数字,依旧是最右上角的数字,刚好是7,就一比较结束(图d)。

    JAVA 代码

    bool Find_t(int *array,int row,int colu,int num)  {  
        bool found false;  
        if(array != NULL && row > 0 && colu > 0)  {  
            int i = 0;  
            int j = colu - 1;  
            while(i < row && colu >= 0)  {  
                if(array[i * colu + j] == num)  {  
                    found true;  
                    break;  
                }  
                else if(array[ i*colu + j] > num)  
                    --j;  
                else  
                    ++ i;  
            }  
        }  
        return found;  
    }  
    int main()  {      
        int array[] = {1,2,8,9,2,4,9,12,4,7,10,13,6,8,11,15};                         
        int i = Find_t(array,4,4,3);  
        printf("%d
    ",i);  
        return 0;  
    }  
  • 相关阅读:
    资源:mysql下载路径
    知识点:jar包与war包的差异
    Linux:jar服务部署
    Flyway:Spring Boot中使用Flyway来管理数据库版本
    Java:Java控制台输出保存进文件
    Maven:手动添加jar包进Maven本地库内
    Https:SSL双向认证机制(理论知识)
    Linux ubuntu 下寻找 texlive 缺失包 texlive 缺失包(转载)
    Android应用开发提高篇(4)-----Socket编程(多线程、双向通信)(转载)
    Android应用开发基础篇(12)-----Socket通信(转载)
  • 原文地址:https://www.cnblogs.com/liuwanqiu/p/8491517.html
Copyright © 2020-2023  润新知