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

      

  • 相关阅读:
    ConcurrentHashMap 实现缓存类
    maven 时区设置&ip&jdk编译版本
    【Hutool】工具类之日期时间工具-DateUtil
    正则表达式
    kafka connector
    kafka
    debezium、kafka connector 解析 mysql binlog 到 kafak
    网络流
    斜率优化
    8.8
  • 原文地址:https://www.cnblogs.com/yanqi110/p/4973737.html
Copyright © 2011-2022 走看看