您的位置:首页 > Web前端

剑指offer----二维数组中的查找的解析与实现

2016-06-14 15:49 429 查看
题目:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

解析:

 (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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息