Leetcode#74 Search a 2D Matrix

原题地址

 

二分搜索变种

先按行搜索,然后按列搜索

 

代码:

 1 bool searchMatrix(vector<vector<int> > &matrix, int target) {

 2   if (matrix.empty() || matrix[0].empty()) return false;

 3 

 4   int m = matrix.size();

 5   int n = matrix[0].size();

 6   int l, r, t, b;

 7 

 8   t = 0;

 9   b = m - 1;

10   while (t <= b) {

11     int c = (t + b) / 2;

12     if (matrix[c][0] == target)

13       return true;

14     else if (matrix[c][0] < target)

15       t = c + 1;

16     else

17       b = c - 1;

18   }

19   if (b < 0)

20     return false;

21 

22   l = 0;

23   r = n - 1;

24   while (l <= r) {

25     int c = (l + r) / 2;

26     if (matrix[b][c] == target)

27       return true;

28     else if (matrix[b][c] < target)

29       l = c + 1;

30     else

31       r = c - 1;

32   }

33 

34   return false;

35 }

 

《Cracking the Code》中也有这道题,答案给出了另一种"走地图"式的解法,挺巧妙,但是效率不如上面的二分法。

你可能感兴趣的:(LeetCode)