剑指offer系列3---二维数组查找

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

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

【思路】从给定的二维数组的右上角的数开始与指定的数进行比较。大了说明选取的数所在的列均大,去除该列(列-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 }

 

原文地址:https://www.cnblogs.com/noaman/p/5338553.html