题解 | #二维数组中的查找#
二维数组中的查找
https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param target int整型 * @param array int整型二维数组 * @param arrayRowLen int array数组行数 * @param arrayColLen int* array数组列数 * @return bool布尔型 */ bool Find(int target, int** array, int arrayRowLen, int* arrayColLen ) { // write code here if(arrayRowLen <= 0 || (*arrayColLen) <= 0) //矩阵为空矩阵,直接返回false return false; int row = 0, col = *arrayColLen - 1; //使用双指针,定义行列指针,f初始时分别指向第0行和最后一列 while(row < arrayRowLen && col >= 0) { if(array[row][col] == target) { return true; } else if(array[row][col] > target) //如果当前元素大于目标值,col左移 { col--; } else if(array[row][col] < target) //如果当前元素大于目标值,row下移一行,col不变,因为后面的列必定大于target { row++; } } return false;; }
本题是数组中元素查找问题。无论是字符串还是数字数组,无论是一维数组还是二维数组,遇到数组元素查找问题,无论返回元素值、索引还是true或者false,首先考虑双指针,双指针又包括二分查找、滑动窗口,前者用于查找某一具体给定目标,后者用于解决子串问题。显然本题是查找目标问题,因此使用双指针,但是又不是使用标准的二分查找,有点像和滑动窗口结合,利用行列的单调递增规律不断收缩查找范围,最终实现n+m和1的时间空间复杂度。
#双指针##刷题心得##数组元素查找##算法刷题笔记#