【Leetcode】 74. 搜尋二維矩陣
阿新 • • 發佈:2018-12-21
編寫一個高效的演算法來判斷 m x n 矩陣中,是否存在一個目標值。該矩陣具有如下特性:
- 每行中的整數從左到右按升序排列。
- 每行的第一個整數大於前一行的最後一個整數。
示例 1:
輸入: matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] target = 3 輸出: true
示例 2:
輸入: matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] target = 13 輸出: false
在已排好序的陣列中找一個數,找到則返回true,否則返回false,這是一道明顯的二分查詢的題目!初始左邊界left=0,右邊界為陣列的總個數right=matrixRowSize*matrixColSize,mid定位二維陣列中的某個值可以使用除法以及求餘得到行列數,即行i=mid/matrixColSize,列=mid%matrixColSize。只要釐清這些,二分查詢二維陣列便也不難了!
此外,有幾個特殊情況需要注意一下:
- 空陣列直接返回false;
- 陣列中只有1個數,直接比較後返回true/false。
程式碼如下:
bool searchMatrix(int** matrix, int matrixRowSize, int matrixColSize, int target) { if(!matrixRowSize){//特殊情況1 return false; } if(matrix[0][0]==target){//特殊情況2 return true; } int left=0,right=matrixRowSize*matrixColSize,mid; while(left+1<right){ mid=(left+right)/2; int temp=matrix[mid/matrixColSize][mid%matrixColSize]; if(temp<target){ left=mid; } else if(temp>target){ right=mid; } else{ return true; } } return false; }