【题目】在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
【思路】从给定的二维数组的右上角的数开始与指定的数进行比较。大了说明选取的数所在的列均大,去除该列(列-1);小了说明选取的数所在的行均小,在下一行进行查询(行+1),相等即为刚好查找的数。
1 package com.exe1.offer; 2 3 /** 4 * 【题目】在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 5 * 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 6 * 【思路】取二维数组的最右上角的数,与指定数字比较。 7 * 相等即返回true; 8 * 大即去掉所在列; 9 * 小即去掉所在行。 10 * @author WGS 11 * 12 */ 13 public class ArraysSearchElement { 14 public boolean getElementFromMatrix(int[][] arr,int num){ 15 int rows=arr.length; 16 int columns=arr[0].length; 17 int i=0,j=columns-1; 18 boolean flag=false; 19 while(i<rows&& j>=0){ 20 if(arr[i][j]>num){ 21 --j; 22 }else if(arr[i][j]<num){ 23 ++i; 24 }else{ 25 flag= true; 26 break; 27 } 28 } 29 return flag; 30 31 } 32 public static void main(String[] args){ 33 int[][] arrays=new int[4][4]; 34 arrays[0]=new int[]{1,2,8,9}; 35 arrays[1]=new int[]{2,4,9,12}; 36 arrays[2]=new int[]{4,7,10,13}; 37 arrays[3]=new int[]{6,8,11,15}; 38 boolean b=new ArraysSearchElement().getElementFromMatrix(arrays,8); 39 System.out.println("是否找到对应的数字"+b); 40 41 42 } 43 }