题目:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析:
二维数组分析时常画为矩形,分析其四个顶点可以看出,左下角及右上角顶点有如下特点:
(1)左下角顶点的上方都比此顶点数值小,其右方都比此顶点数值大;
(2)右上角顶点的左方都比此顶点数值小,其下方都比此顶点数值大。
因此可以选取坐下角顶点或右上角顶点作为基准与查找数值进行比较,根据大小判断缩小查找范围。
package com.gpl.offer.jianzhi;
/**
* Created by gpl on 2016/7/18.
*/
public class DoubleArrayFindNum {
public boolean find(int array[][], int target){
boolean isFind = false;
int cols = array.length; //数组行数
int rows = array[0].length; //数组列数
int i = 0;
int j = rows-1;
while(i<cols && j>=0){
int value = array[i][j];
if(value>target)
j--;
else if(value<target)
i++;
else{
isFind = true;
break;
}
}
return isFind;
}
public static void main(String args[]){
DoubleArrayFindNum daf = new DoubleArrayFindNum();
int[][] array = {{1,2,3},{4,5,6},{7,8,9}};
System.out.println(daf.find(array,1));
}
}