Vulnhub-DC-5靶機實戰
阿新 • • 發佈:2022-05-18
74. 搜尋二維矩陣
編寫一個高效的演算法來判斷 m x n
矩陣中,是否存在一個目標值。該矩陣具有如下特性:
- 每行中的整數從左到右按升序排列。
- 每行的第一個整數大於前一行的最後一個整數。
示例 1:
輸入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
輸出:true
示例 2:
輸入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
輸出:false
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 100
-104 <= matrix[i][j], target <= 104
思路:
先去尋找元素所在行。然後二分尋找。
class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int m=matrix.size(); int n=matrix[0].size(); int row=-1; //尋找所在行 for(int i=0;i<m;i++){ if(matrix[i][0]<=target&&matrix[i][n-1]>=target){ row=i; } } if(row==-1)return false; //二分查詢 int left=0; int right=n-1; while(left<right){ int mid=left+(right-left)/2; if(target>matrix[row][mid]){ left++; }else if(target<matrix[row][mid])right--; else return true; } return matrix[row][left]==target;//判斷一下 } };