1. 程式人生 > 其它 >Leetcode74. 搜尋二維矩陣(C++思路與程式碼)

Leetcode74. 搜尋二維矩陣(C++思路與程式碼)

技術標籤:c++二分法leetcode演算法

編寫一個高效的演算法來判斷 m x n 矩陣中,是否存在一個目標值。該矩陣具有如下特性:

每行中的整數從左到右按升序排列。
每行的第一個整數大於前一行的最後一個整數。
在這裡插入圖片描述
輸入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,50]], target = 3
輸出:true

思路:
採用二分法,難點在於如何將二維陣列轉化為一位。m x n 矩陣一維索引 轉 二維座標(row, col) row = index / n, col = index % n。剩下就是二分法while(left<right)。

class
Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { if(matrix.empty()||matrix[0].empty()) return false; int m=matrix.size(),n=matrix[0].size(); int left=0; int right=m*n-1; while(left<right){ int mid=
left+right>>1; if(matrix[mid/n][mid%n]>=target){ right=mid; } else{ left=mid+1; } } if(matrix[left/n][left%n]==target) return true; return false; } };