天天看点

【数组1】-二维数组查找

(面试题3)

【题目】在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。

    请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

【思路】从给定的二维数组,选取最右上角的数target,开始与二维数组中数字进行比较。

   arrs[i]>target,说明选取的数所在的列均大,去除该列(列-1);

          arrs[i]<target,,说明选取的数所在的行均小,在下一行进行查询(行+1),相等即为刚好查找的数。

package com.exe1.offer;

/**
 * 【题目】在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
 *         请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
 * 【思路】取二维数组的最右上角的数,与指定数字比较。
 *           相等即返回true;
 *       大即去掉所在列;
 *       小即去掉所在行。
 * @author WGS
 *
 */
public class ArraysSearchElement {
    public boolean getElementFromMatrix(int[][] arr,int num){
        int rows=arr.length;
        int columns=arr[0].length;
        int i=0,j=columns-1;
        boolean flag=false;
        while(i<rows&& j>=0){
            if(arr[i][j]>num){
                --j;
            }else if(arr[i][j]<num){
                ++i;
            }else{
                flag= true;
                break;
            }
        }
        return flag;
         
    }
    public static void main(String[]  args){
        int[][] arrays=new int[4][4];
        arrays[0]=new int[]{1,2,8,9};
        arrays[1]=new int[]{2,4,9,12};
        arrays[2]=new int[]{4,7,10,13};
        arrays[3]=new int[]{6,8,11,15};
        boolean b=new ArraysSearchElement().getElementFromMatrix(arrays,8);
        System.out.println("是否找到对应的数字"+b);
        
        
    }
}