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

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



转载于:https://www.cnblogs.com/yayagamer/archive/2012/01/06/2314235.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值