您的位置:首页 > 其它

3. 二维数组中的查找

2015-08-20 16:18 246 查看
参考:二分查找方法

题目描述

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

解析

方法一:剑指offer中提供的方法

如果我们从左上角开始查找,那么当查找元素比左上元素大时,无法判断是应该向下、向右还是向右下;从右下也是同理。

但是如果我们从右上角开始查找,当查找元素比右上元素大时,那么第一行淘汰,只能向下;当查找元素比右上元素小时,那么最后一列淘汰,只能向左;从左下角也是同理。

实现

bool Find(int* matrix, int rows, int columns, int number){
bool found = false;
//传参是否有效
if(matrix==NULL || rows<=0 || columns<=0)
return found;
////从二维数组的左上角开始
//int row = 0;
//int column = columns - 1;
//while(row<rows && column>=0){
//  int index = row * columns + column;
//  if(matrix[index]==number){
//      found = true;
//      break;
//  }else if(matrix[index] < number){
//      row++;
//  }else{
//      column--;
//  }
//}
//return found;

//从二维数组的右下角开始
int row = rows-1;
int column = 0;
while(row>=0 && column<columns){
int index = row * columns + column;
if(matrix[index] == number){
found = true;
break;
}else if(matrix[index] < number){
column++;
}else{
row--;
}
}
return found;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: