zoukankan      html  css  js  c++  java
  • 【笔记】远亲不如近邻 --二分法

    远亲不如近邻

    求距离最小值,很容易想到二分法;但此题比较的是距离,因此我是这么理解的:

    • 定义一个ans,表示当前最小距离,当出现最小距离时,更新ans值
    • 分别求出大于Key的第一个值以及小于Key的最后一个值,比较这两个值与key的距离
    • 输出所有方案的最小距离。

    AC代码:

      vector<int> solve(int n, int m, vector<int>& a, vector<int>& x) {     
            sort(a.begin(),a.end());
            vector<int> pos(m);
            int ans=2e9;
            for(int i=0;i<m;++i)
            {
            int low=0;
            int high=n-1;
             if(x[i]<a[0])
                ans=a[0]-x[i];
             else
              {
                while(low<=high)
                {
                    int mid=(low+high)/2;
                    if(a[mid]<=x[i])
                    {
                        ans=min(ans,x[i]-a[mid]);
                        low=mid+1;
                     }
                    else
                        high=mid-1;
                }
               }
            if(x[i]>a[n-1])
                ans=min(ans,x[i]-a[n-1]);
            else
            {
                low=0,high=n-1;
                while(low<=high)
                {
                int midd=(low+high)>>1;
                if(a[midd]>=x[i])
                {
                    ans=min(ans,a[midd]-x[i]);
                    high=midd-1;
                }
                else
                    low=midd+1;
            }
            }
                pos[i]=ans;
                ans=2e9;
          }
            return pos;
        }
    
  • 相关阅读:
    定时器与休眠
    进程的创建
    详述进程创建和程序执行
    线程
    会话,进程组,作业控制
    进程优先级和调度
    进程资源
    日志信息log
    能力
    浅谈产品模型(Profile)在程序设计中的作用
  • 原文地址:https://www.cnblogs.com/acmer-hmin/p/13513550.html
Copyright © 2011-2022 走看看