首页 > 代码库 > 每日编程-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