1. 程式人生 > 其它 >Vulnhub-DC-5靶機實戰

Vulnhub-DC-5靶機實戰

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;//判斷一下
    }
};