剑指Offer->二维数组中的查找
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路
分析二位数组的结构,左上的最小、右下的最小。如果从左上开始查找,如在
[ 1, 3, 6, 8, 11]
[ 4, 5, 9, 14, 15]
[ 7, 10, 12, 16, 17]
这样的二位数组中查找7,就会出现查找复杂的查找线路。
可以考虑从右上开始查找,因为在二维数组右上角的数字,有左边的数小于它、下面的数组大于它的特点。查找7的时候就有11、8、14、9、12、10、7这样的查找线路,简单明了。
代码
1 class Solution { 2 public: 3 bool Find(int target, vector<vector<int> > array) { 4 bool hastarget=false; 5 if(array.empty()){ 6 return hastarget; 7 } 8 if(array[0].empty()){ 9 return hastarget; 10 } 11 12 int row=array.size(); 13 int col=array[0].size(); 14 if(target<array[0][0]||target>array[row-1][col-1]){ 15 return hastarget; 16 } 17 18 int i=0; 19 int j=col-1; 20 while(i<row&&j>=0){ 21 22 if(array[i][j]==target){ 23 hastarget=true; 24 break; 25 } 26 else if(array[i][j]>target){ 27 j--; 28 } 29 else{ 30 i++; 31 } 32 } 33 34 return hastarget; 35 } 36 };

浙公网安备 33010602011771号