74. Search a 2D Matrix
阿新 • • 發佈:2017-12-07
思想 ger 整數 進行 pty 返回 sea hat n)
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
- Integers in each row are sorted from left to right.
- The first integer of each row is greater than the last integer of the previous row.
For example, Consider the following matrix:
[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ]
Given target = 3
, return true
.
編寫一個有效的算法,在m × n矩陣中搜索一個值。該矩陣具有以下屬性:
- 每行中的整數從左到右排序。
- 每行的第一個整數大於前一行的最後一個整數。
例如,考慮下面的矩陣:
[ [1,3,5,7], [10,11,16,20], [23,30,34,50] ]
給定目標 = 3
,返回true
。
(1)思想1:依舊使用二分法,由於是排序的數組,所以,先對數組的第一列進行二分法查詢,得到位於哪一行,然後再對那一行進行二分法查詢,得到最終結果,代碼如下:
1 class Solution { 2 public: 3 boolsearchMatrix(vector<vector<int>>& matrix, int target) { 4 if (matrix.empty() || matrix[0].empty()) 5 return false; 6 if (target < matrix[0][0] || target > matrix.back().back()) 7 return false; 8 int begin=0; 9 int end=matrix.size()-1; 10 while(begin<=end) 11 { 12 int mid=begin+(end-begin)/2; 13 if(matrix[mid][0]==target) 14 return true; 15 else if(matrix[mid][0]<target) 16 begin=mid+1; 17 else 18 end=mid-1; 19 } 20 int temp=end; 21 begin=0; 22 end=matrix[temp].size()-1; 23 while(begin<=end) 24 { 25 int mid=begin+(end-begin)/2; 26 if(matrix[temp][mid]==target) 27 return true; 28 else if(matrix[temp][mid]<target) 29 begin=mid+1; 30 else 31 end=mid-1; 32 } 33 return false; 34 } 35 };
74. Search a 2D Matrix