剑指offer 面试题4:二维数组中的查找
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
编程思想
首先选取数组中右上角(或者左下角)的数字,如果该数字等于要查找的数字则返回true,如果该数字大于要查找的数字则提出该数字所在列,如果该数字小于要查找的数字则提出该数字所在行。以此类推,可以缩小查找范围,直到查找成功或者查找范围为空。
编程实现
class Solution { public: bool Find(int target, vector<vector<int> > array) { int rowCnt = array.size(); //矩阵的行数 int colCnt = array[0].size(); //矩阵的列数 bool found = false; if(rowCnt > 0 && colCnt > 0) { int row = 0; int col = colCnt - 1; while(row <= rowCnt-1 && col >= 0) //注意这里的临界条件 { if(array[row][col] == target) { //如果给的指向二位数组的指针的话 //array[row * colCnt + col] found = true; break; } else if(array[row][col] > target) { --col; } else { ++row; } } } return found; } };
题目总结
不能选择左上角的数字或者右下角的数字。