Sunday, 20 December 2015

LeetCode 2D Matrix log(row)+log(col)=O(n)

LeetCode  2D Matrix

class Solution {

public:

    int search_row(vector<vector<int>>& matrix,int target,int l,int r,int m)

    {

        if(l>r)

         return -1;

        if(l==r)

          {

              if(l==0)

                return l;

              else

                return (l-1);

          }

        int mid=(l+r)/2;

        if(matrix[mid][0]==target)

         return mid;

        if(mid-1>=0 && matrix[mid-1][0]<=target && matrix[mid][0]>target)

         return (mid-1);

        if(mid+1<m && matrix[mid][0]<target && matrix[mid+1][0]>=target)

         {

             if(matrix[mid+1][0]==target)

               return (mid+1);

             else

               return mid;

         }

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

         return search_row(matrix,target,l,mid-1,m);

        else

         return search_row(matrix,target,mid+1,r,m);

    }

    bool binary_search(vector<vector<int>>& matrix, int target,int row,int l,int r){

        if(l>r)

         return false;

        int mid=(l+r)/2;

        if(target==matrix[row][mid])

         return true;

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

         return binary_search(matrix,target,row,l,mid-1);

        else

         return binary_search(matrix,target,row,mid+1,r);

    }

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

        int m=matrix.size();

        if(m==0)

          return false;

        int n=matrix[0].size();

        if(n==0)

          return false;

        int row=search_row(matrix,target,0,m,m);

        if(row==-1)

          return false;

        if(matrix[row][0]==target)

          return true;

        return binary_search(matrix,target,row,0,n);

    }

};

No comments:

Post a Comment