您的位置:首页 > 其它

在一个二维有序数组中,查找指定的数据是否存在

2012-01-06 12:02 423 查看
Say Given a 2d array where all the numbers in the array are in increasing order from left to right and top to bottom.

What is the best way to search and determine if a target number is in the array?

sample:

int a[][] = {
{1, 3, 5, 7, 9},
{2, 6, 11, 13, 15},
{4, 12, 17, 19, 21},
{8, 14, 18, 23, 25}//,
//{10,16, 20, 24, 26}
};

A: solution 1

从左下脚开始扫描需要查找的值value,

1. 如果 value == a[row][col],说明找到,返回

2. 如果value < a[row][col],那么row--

3. 如果value > a[row][col],那么col++

4. 如果一直到 row < 0 && col > max_col,说明没有找到,失败。

示例代码(passed testing)

View Code

static boolean search2ndArrayData(int value)
{
int a[][] = {
{1, 3,  5,  7,  9},
{2, 6,  11, 13, 15},
{4, 12, 17, 19, 21},
{8, 14, 18, 23, 25}//,
//{10,16, 20, 24, 26}
};

if (value < a[0][0] || value > a[3][4])
return false;

int row = 3;
int col = 0;

while (col < 5 && row >= 0)
{
if (a[row][col] == value)
{
System.out.printf("find data %d row and column are [%d][%d]\n", value, row, col);
return true;
}
else if (a[row][col] < value)
col++;
else
row--;
}

return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐