zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    

      

  • 相关阅读:
    国际域名转出ICANN投诉
    C#中使用SslStream类来创建SSL服务器/客户端
    将.com域名转到godaddy的操作教程
    Google Test Automation Conference 2013 Schedule
    3月收藏
    4月收藏
    2月收藏
    5月收集
    stl中queues的基本用法
    codeblocks花屏终极解决方法
  • 原文地址:https://www.cnblogs.com/yanqi110/p/4973737.html
Copyright © 2011-2022 走看看