首页 > 代码库 > 每日编程-20170425
每日编程-20170425
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解答:
本来以为是二维数组的二分查找,哪知写完了才发现思路不正确
如果是二分查找,需要保证每一行的末尾元素要小于下一行的开头元素才行
这道题只是简单的在前多少行中(这些行的第一个元素要小于等于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 };
每日编程-20170425
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。