剑指 Offer 04. 二维数组中的查找(C语言)
剑指 Offer 04. 二维数组中的查找(C语言)
-
- 2.1. version 0.1(success)
- 2.2. version 0.2(success)
1. Title
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例:
,,,
详情:点击这里
2. Do it
2.1. version 0.1(success)
/*!
* @file 04findNumberIn2DArray.c
* @date 2021-08
* @version 0.1
* @author forbit
* @brief 采用暴力遍历方法
* @details score 24-28ms 8.1-8.2MB, 时间复杂度O(nm),空间负责度O(1)。
*/
bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target){
/*!
* @brief
* @param[in] matrix 二维数组
* @param[in] matrixSize 数组的行
* @param[in] matrixColSize:数组的列
* @param[in] target:目标整数
* @return 判断数组中是否含有该整数。
* @short row 行, col列
*/
//! 入参判断
if(matrix == NULL|| matrixSize==0 || *matrixColSize == 0) return false;
//!判断是否会存在该整数
if(target < matrix[0][0] || target > matrix[matrixSize-1][*matrixColSize-1]) return false;
//! 遍历矩阵查找
for(int i=0; i<matrixSize; i++)
for(int j=0; j<(*matrixColSize); j++)
if(matrix[i][j] == target)
return true;
return false;
}
2.2. version 0.2(success)
/*!
* @file 04findNumberIn2DArray.c
* @date 2021-08
* @version 0.2
* @author forbit
* @brief 通过利用矩阵的数字规律(每一行和列都按照从左到右递增的顺序排序),来减少次数。(书本上的方法)。
* @details score 28-36ms 8.3-8.4MB, 时间复杂度O(n+m),空间负责度O(1)。
*/
bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target){
/*!
* @brief
* @param[in] matrix 二维数组
* @param[in] matrixSize 数组的行
* @param[in] matrixColSize:数组的列
* @param[in] target:目标整数
* @return 判断数组中是否含有该整数。
* @short row 行, col列
*/
bool found = false;
//! 入参判断
if(matrix != NULL && matrixSize>0 && *matrixColSize > 0)
{
int row=0, col = *matrixColSize-1;
//! 缩小范围
while(row < matrixSize && col >= 0)
{
if(matrix[row][col] == target)
{
found = true;
break;
}
else if(matrix[row][col] > target) --col;
else ++row;
}
}
return found;
}

浙公网安备 33010602011771号