题目:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解析:
(1)该数组是有序的 从左到右 从上到下 都是递增的 这是问题的关键
(2)从左下角或者右上角查找
从左下角查找:target比当前元素大,右移。
target比当前元素小,上移。
从右上角查找:target比当前元素大,下移。
从左下角开始查找的实现
public boolean Find(int [][] array,int target)
{
//左下角的元素所在的位置是最后一行第0列
int i = array.length-1;//二维数组的行数
int j = 0;//第0列
while(i >= 0 && j < array[0].length)//当行数索引大于等于零 列数索引小于总列数
{
if(array[i][j] > target)//如果
{
i--; //如果target小于a[i][j],则列不变,行上移
}
else if(array[i][j] < target)//如果target小于a[i][j],则行不变,列右移
{
j++;
}
else
return true;
}
return false;
}
从右上角开始查找的实现
public boolean Find(int [][] array,int target)
{
int i = 0;
int j = array[0].length-1;
while(i < array.length && j >= 0)
{
if(target < array[i][j] )
{
j--; //如果target小于a[i][j],行不变 列左移
}
else if(target > array[i][j])//如果target大于a[i][j],列 不变 行下移
{
i++;
}
else
return true;
}
return false;
}