数组:
数组是C++中基本的数据结构,它占据一块连续的内存并且按照顺序存储数字和字符。
由于数组中的内存是连续。于是我们可以根据下标在O(1)时间读/写任何元素。根据数组时间效率的优点,用数组来实现简单的哈希表,把数组的下标记为哈希表的Key(键值),而把数组中的每个数字设为哈希表的Value(值)。
在此我们以二维数组为例,进行查找操作,熟悉数组的使用方式。
二维数组:
二维数组在内存中占据连续的空间。在内存中从上到下存储各行元素,在同一行中按照从左到右的顺序存储各列。因此我们可以根据行号和列号计算出相对于数组首地址的偏移量,从而找到对应的元素。
题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
例如下面这个二维数组:(查找数字10的时候,返回true)
测试用例:
int main(){
int matrix[4][4];
//生成一个行及列分别递增的整数二维数组, 好的生成方法是什么???
matrix[0][0] = 1; matrix[0][1] = 2; matrix[0][2] = 8; matrix[0][3] = 9;
matrix[1][0] = 2; matrix[1][1] = 4; matrix[1][2] = 9; matrix[1][3] = 12;
matrix[2][0] = 4; matrix[2][1] = 7; matrix[2][2] = 10; matrix[2][3] = 13;
matrix[3][0] = 6; matrix[3][1] = 8; matrix[3][2] = 11; matrix[3][3] = 15;
//打印出这个二维数组
std::cout << "Matrix is:\n";
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++)
std::cout << matrix[i][j] << "\t";
std::cout << "\n";
}
//要查找的整数
int number;
std::cout << "Enter to find the number: ";
std::cin >> number;
//二维数组中是否有要查找整数
bool result = matrixFind(matrix, 4, 4, number);
if(result)
std::cout << "Find it\n";
else
std::cout << "Not found\n";
return 0;
}
matrixFind函数实现
//查找函数
//查找思路:自二维数组的右上角开始查找,如果所查找的数字小于右上角的数,那么最右侧一列可排除,可依此继续查找,不断缩小范围
//否则,若所查找数字大于右上角的数,必然在最右侧
bool matrixFind(int matrix[][4], int rows, int columns, int number){//以二维数组作为函数参数的传入方法
//自右上角开始查找,使用while循环,加入数组为NULL的判断
//查找结果初始化为失败
bool found = false;
//从右上角开始查找
//右上角坐标,行、列
int row = 0, colum = columns - 1;
while(row < rows && colum >= 0 && matrix != NULL){
if(matrix[row][colum] == number){
found = true;
break;
}else if(matrix[row][colum] < number){
++row;
}else{
--colum;
}
}
return found;
}
注意C++中二维数组作为函数参数传入的时候,必须指定二维长度。