LeetCode 74——搜尋二維矩陣

seniusen發表於2018-10-29

1. 題目

2. 解答

  • 若矩陣為空,比如 [], [[]],此時直接返回 false。
  • 若目標值小於矩陣第一個元素或者大於矩陣最後一個元素,則目標值不在矩陣範圍內,直接返回 false。
  • 其他情況下,則從矩陣第一行開始逐行掃描。若目標值位於矩陣某一行數值範圍內,再針對矩陣的某一行用二分查詢精準定位。

class Solution {
public:
    
    bool binary_search(vector<int>& data, int target)
    {
        int left = 0;
        int right = data.size() - 1;
        int mid = 0;

        while(left <= right)
        {
            mid = left + (right - left) / 2;

            if (data[mid] == target)
            {
                return true;
            }
            if (data[mid] < target)
            {
                left = mid + 1;
            }
            else
            {
                right = mid - 1;
            }
        }

        return false;
    }

    bool searchMatrix(vector< vector<int> > & matrix, int target) {

        int row = matrix.size();
        if (row == 0) return false; // [] 矩陣為空,直接返回

        int col = matrix[0].size(); // [[]] 矩陣為空,直接返回
        if (col == 0) return false;

        if (target < matrix[0][0] || target > matrix[row-1][col-1]) return false; // 目標值小於第一個元素或者大於最後一個元素,直接返回

        // 按照矩陣的行依次掃描
        for (int i = 0; i < row; i++)
        {
            if (target == matrix[i][0])
            {
                return true;
            }
            else if (target == matrix[i][col-1])
            {
                return true;
            }
            else if (matrix[i][0] < target && target < matrix[i][col-1])
            {
                return binary_search(matrix[i], target);
            }
            else
            {
                continue;
            }
        }
        
        return false;
    }
};

獲取更多精彩,請關注「seniusen」!

相關文章