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;
        }
    };
    

      

  • 相关阅读:
    移动端rem布局
    父子组件通信
    拦截器
    Vue路由教程
    使用var和let的区别
    数组去重的几种方法
    利用位运算进行权限控制
    线程基础
    关于get请求的乱码问题
    nuxt.js Navigating to current location ("/xxx") is not allowed
  • 原文地址:https://www.cnblogs.com/yanqi110/p/4973737.html
Copyright © 2011-2022 走看看