LeetCode() Search a 2D MatrixII

一开始的超时思路

int row=a.size(),col=a[0].size();
        for(int i=0;i<row;i++)
        {
            if(a[i][col-1] > target && a[i][0]<=target)
            {
                int low=0,high=col-1;
                while(low<=high)
                {
                    int mid=(low+high)/2;
                    if (a[i][mid] > target)
                         low = mid-1;
                    else if (a[i][mid] < target)
                         high = mid + 1;
                    else
                        return true;
                }
            }
        }
        return false;

 先判断列上的数,是否大于target,改进后还是超时

int row=a.size(),col=a[0].size();
        for(int i=0;i<col;i++)
        {
            if(a[0][i]>target)
            {
                col=i-1;
                break;
            }
        }
        if(col == -1)
            return false;
        for(int i=0;i<row;i++)
        {
            if(a[i][col-1] > target && a[i][0]<=target)
            {
                int low=0,high=col-1;
                while(low<=high)
                {
                    int mid=(low+high)/2;
                    if (a[i][mid] > target)
                         low = mid-1;
                    else if (a[i][mid] < target)
                         high = mid + 1;
                    else
                        return true;
                }
            }
        }
        return false;

 提示用分治算法,什么是分治?

下面是分治的思路:

从右上角开始查找,为什么我一开始觉得这个思路没有前一个有效率呢?直观上来看 不是很慢吗?

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& a, int target) {
        int row=a.size(),col=a[0].size();
        int i=0,j=col-1;
        while(i<row && j>=0)
        {
            if(a[i][j] > target)
                j--;
            else if(a[i][j] < target)
                i++;
            else
                return true;
        }
        return false;
    }
};

  

原文地址:https://www.cnblogs.com/yanqi110/p/4973737.html