1. 程式人生 > >74. Search a 2D Matrix

74. Search a 2D Matrix

思想 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     bool
searchMatrix(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