二维数组的查找

二维数组中的查找

http://www.nowcoder.com/questionTerminal/abc3fe2ce8e146608e868a70efebf62e

算法原理:
目标是在数据中找到一个特定的数,不想暴力枚举就要利用数据间的关系进行排除,最快速度地排除缩小查找范围,如果选取中间的数来说,范围会有重叠,所以干干净净地选取右上角或者左下角的内容,
选取右上角:列数最大的第一行元素,如果比目标数大,则排除一整列,列数减一,向左比较,如果比目标数小,则排除一行,行数减下,向下比较
选取左下角:是一列中最大的,一行中最小的,如果大于目标,排除一整行,行数减一,向上移动,如果小于目标,排除一整列,列数加一,向右移动


代码:
1. vector<vector<int> > array 是建立一个二维数组,外面的第一层数据类型是一维数组,里面的第二层数据是整型, 问题是如何调用
用row=array.size() 获取行数
column= array[0].size() 获取列数
array[][]获取数据
2. int * matrix  当成一个长的一维数组,然后计算索引
matrix[raw*columns+column] 
3 多个条件判断用else if, 不能用多个if,不然根本不是并列关系,而是会当成下一层执行
4 while 循环判断条件 &&是与, || 是或
知道错误出现在了哪里,在判断条件上
对于while 循环,如果满足条件就执行,所以条件应该包含所有正确的,直到查到左下角时如果依然不满足就继续加减后导致不符合跳出循环,而我没有限定范围只圈住了中间值,对于初始到左下角的确是可以的,左下角是[3][0], 我的条件是while (a!=3 || b!=0),当索引到左下角时,根本不会进行数据比对直接跳出去,然后就会出现段错误
正确的应该为: while ((row < rows) && (b >=0))





全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务