二维数组查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路分析
二维数组查找,该数字从左到右从上到下有序。
从右上角元素(或者左下角)找起,若相等则返回true,若该元素大于target,说明该列可以淘汰(该列下面的元素均大于该元素),则column减一,否则row减一(该行可淘汰)。注意边界判断,数组是否为空,行列长度是否小于等于0。
代码块
import java.security.cert.TrustAnchor;
public class TwoDArraySearch {
public static boolean TwoDArraySearch(int[][] twoDArray, int target)
{
//边角判断
if(twoDArray == null)
return false;
if(twoDArray.length == 0)
return false;
if(twoDArray[0].length == 0)
return false;
//一般情况
int row = 0;
int col = twoDArray[0].length-1;
while(row<twoDArray.length && col>=0)
{
if(twoDArray[row][col] == target)
return true;
else if (twoDArray[row][col] < target)
row++;
else col--;
}
return false;
}
public static void main(String[] args)
{
int[][] in1 = {{1,2,3},{2,3,4},{3,4,5}};
int[][] in2 = {{1},{2},{3}};
int[][] in3 = {{1,2,3}};
int[][] in4 = {};
int[][] in5 = {{},{},{}};
int[][] in6 = null;
System.out.println("out1:"+TwoDArraySearch(in1,8));
System.out.println("out2:"+TwoDArraySearch(in2,2));
System.out.println("out3:"+TwoDArraySearch(in3,2));
System.out.println("out4:"+TwoDArraySearch(in4,2));
System.out.println("out5:"+TwoDArraySearch(in5,2));
System.out.println("out6:"+TwoDArraySearch(in6,2));
}
}