• 剑指Offer03-二维数组中的查找


    题目:

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

    解题思路:

    查找的本质就是先指定一个初始值,把初始值与要查找的数进行比较,如果两个数相等,就返回true,否则初始值发生变化,继续与要查找的值进行比较,直到找到或找不到;

    在本题中的二维数组中,数字的排序遵循从左向右增加,从上往下增加的规律,问题的关键在于如何选取适当的初始值,来简化查找的过程;

    简化查找的过程在于如何缩小数组中的范围,左上角和右下角分别对应数组中的最小值和最大值,如果以两者中的其中之一为初始值的话,初始值都能够朝着两个方向发生变化

    无法缩小查找的范围(比如:以左上角的值为初始值,如果要查找的值比初始值大,那么下一个初始值的选取是在第一行或者第一列,没法做到缩小查找范围的作用。右下角同理)

    若选取右上角和左下角的值为初始值,比如右上角的值为初始值,若要查找的值小于初始值,则可以排除右上角所在的列,若要查找的值大于初始值,则可以排除右上角所在的行。

    以此类推,直到找到要查找的值或找不到返回false,左下角的值同理。

    代码如下:

    public class ArraySerach {
        public static void main(String[] args) {
            int[][] arr = {    {1,2,8,9},
                             {2,4,9,12},
                             {4,7,10,13},
                             {6,8,11,15}};
            System.out.println(search(arr,7));
        }
        
        private static boolean search(int[][] arr,int value) {
            int a = arr[0].length;
            int b = arr.length;
            int i = 0;
            int j = a-1;
            while(i<=b-1 && j>=0) {
                if(arr[i][j] == value) {
                    return true;
                }
                if(arr[i][j] > value) {
                    j--;
                }else {
                    i++;
                }
            }
            return false;
        }
    }    
  • 相关阅读:
    vue中创建全局单文件组件/命令
    export default与export的区别
    Android Fragment的使用(转载)
    ios 内存管理总结
    object-c 混编 调用C,C++接口
    Python3基础 yield send 获得生成器后,需要先启动一次
    Python3基础 yield next 获取生成器生出的值
    Python3基础 函数 无return、return 空或None 的效果相同
    Python3基础 函数 函数名赋值操作
    Python3基础 函数 函数名作为参数传给函数
  • 原文地址:https://www.cnblogs.com/meteorst/p/9220495.html
Copyright © 2020-2023  润新知