题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解答:
本来以为是二维数组的二分查找,哪知写完了才发现思路不正确
如果是二分查找,需要保证每一行的末尾元素要小于下一行的开头元素才行
这道题只是简单的在前多少行中(这些行的第一个元素要小于等于target)对每行进行二分查找而已
1 class Solution { 2 public: 3 4 template <class T> 5 int compareT(T t1, T t2) { 6 if (t1 == t2) 7 return 0; 8 else 9 { 10 if (t1 < t2) 11 return -1; 12 else 13 return 1; 14 } 15 } 16 template <class T> 17 int BinarySearch(const vector<T> &v, T key) { 18 int low = 0, high = v.size() - 1, mid; 19 while (low <= high) 20 { 21 mid = (low + high) / 2; 22 switch (compareT(key, v[mid])) 23 { 24 case 0: 25 return mid; 26 case 1: 27 low = mid + 1; 28 break; 29 case -1: 30 high = mid - 1; 31 break; 32 } 33 } 34 return v.size(); 35 } 36 37 bool Find(int target, vector<vector<int> > array) { 38 for (auto i = 0; i < array.size() && array[i].size() >0 && array[i][0] <= target; i++) 39 { 40 if (BinarySearch(array[i], target) != array[i].size()) 41 { 42 return true; 43 } 44 } 45 return false; 46 } 47 };