leetcode 240 搜索二維矩陣(這個題目的代碼同樣適用於leetcode 74).

思路:縮小問題規模 (減治)

設矩陣左下角元素 matrix[i][j],它是第 i 行最小值,同時也是第 j 列最大值

若 target < matrix[i][j] (小於第 i 行最小值),則排除第 i 行,令 i--

若 target > matrix[i][j] (大於第 j 列最大值),則排除第 j 列,令 j++

循環 2~3 直到找到 target,或所有行列均被排除

當然也可以從右上角開始

bool searchMatrix(int** matrix, int matrixRowSize, int matrixColSize, int target) {

    int i = matrixRowSize - 1, j = 0;

    while (i >= 0 && j < matrixColSize) {

        if (target < matrix[i][j]) i--;

        else if (target > matrix[i][j]) j++;

        else return true;

    }

 return false;

}

二分:

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

      if(!matrix.size())return false;

      int a=matrix.size();

      for(int j=0;j<a;j++)

      {

          int r=matrix[0].size()-1, l=0;

      while(l<=r)

       {    

           int mid=(l+r)>>1;

           if(target<matrix[j][mid])

            r=mid-1;

           else if (target>matrix[j][mid])

           l=mid+1;

           else 

           return true;

       }

    }

    return false;

    }

};

時間複雜度是O(m*logn)(m是行數,n是列數)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章