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;
}