剑指offer4. 二维数组中查找 P44

剑指offer4. 二维数组中查找 P44

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

c++传二维数组,要么像下面这样传一维指针之后计算(此时实参不能new或者malloc出,因为地址可能不连续) 要么必须指明所有维数大小或者省略第一维的,但是不能省略第二维或者更高维的大小,这是由编译器原理限制的。
编译器是这样处理数组的:
对于数组 int p[m][n];
如果要取p[i][j]的值(i>=0 && i<m && 0<=j && j < n),编译器是这样寻址的,它的地址为:
p + i*n + j; (p是数组首地址)所以不指定n的话,没办法计算。

建议用vector数组替代二维数组,使用灵活,且不涉及指针这种乱七八糟的操作。

/*  行是增的,列是减的    注意: 本题用不了横纵向的二分查找!!!*/

bool findNumbers( const int *martix, int t, int rows, int columns) {
	if ((martix == NULL) || (rows == 0 && columns == 0)) return false;
	int x = 0, y = columns - 1;
	while (x < rows && y >= 0) {   // 注意两个边界不一样 
		int temp = martix[x * columns + y];
	    if (temp == t) 
		    return true;
    	else if (t > temp)
	        ++x;
    	else 
	        --y;
	}
	return false;	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值