zoukankan      html  css  js  c++  java
  • 【Offer】[4] 【二维数组中的查找】

    题目描述

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

    思路分析

      由于给定的二位数组是从左到右递增,从上到下递增,所以可以选择二维数组中的某一个边角(右上角或者左下角)开始进行搜索和筛选,比如:从右上角开始,如果目标数字大于右上角的数字(由于从左到右递增),说明要查找的数字在第一行的下面 ,那么第一行的数字可以排除掉,继续以这种方式查找,便可以排查目标数字

    Java代码

    public class Offer004 {
        public static void main(String[] args) {
    //      int [][] arr = {{},{}}; 
            int [][] arr = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}}; 
    //      System.out.println(arr.length);
    //      System.out.println(arr[0].length);
            System.out.println(Offer004.findInPartiallySortedMatrix(arr, 11));
            System.out.println(Offer004.findInPartiallySortedMatrix(arr, 7));
        }
        public static boolean findInPartiallySortedMatrix(int[][] arr, int target) {
            return Solution1(arr, target);
        }
        
        /**
         * 从右上角开始找,如果目标数字小于右上角数字,j--,大于i++,依次缩小查找的范围
         *              
         * @param arr
         * @param target
         * @return
         */
        public static boolean Solution1(int[][] arr, int target) {
            if(arr==null || arr.length<=0 || arr[0].length<=0 ) {
                throw new IllegalArgumentException("参数非法!");
            }   
            int i=0;
            int j= arr[0].length-1;
            while(i<arr.length && j>=0) {
                if(target<arr[i][j]) {
                    j--;
                }else if(target>arr[i][j]){
                    i++;
                }else {
                    return true;
                }
            }   
            return false;
        }
    }
    

    代码链接

    剑指Offer代码-Java

  • 相关阅读:
    SystemParametersInfo调用失败的问题
    在wince下如何禁止移动窗体
    【转】WinCE控制面板添加应用程序
    CE6.0 下获得 SD 卡序列号的方法
    SetSystemMemoryDivision 的用法
    两经纬度之间的距离计算
    PC 上访问设备数据库的方法
    通过程序模拟鼠标按下
    车牌号
    比较字母大小
  • 原文地址:https://www.cnblogs.com/haoworld/p/offer4-er-wei-shu-zu-zhong-de-cha-zhao.html
Copyright © 2011-2022 走看看