zoukankan      html  css  js  c++  java
  • 387. 最小差

    给定两个整数数组(第一个是数组 A,第二个是数组 B),在数组 A 中取 A[i],数组 B 中取 B[j],A[i] 和 B[j]两者的差越小越好(|A[i] - B[j]|)。返回最小差。

    样例

    给定数组 A = [3,4,6,7], B = [2,3,8,9],返回 0

    时间复杂度 O(n log n)

    没有说明原数组是有序的,我们可以先给两个数组排个序,nLogn

    最简单的数组不重叠的情况两种,先排除

    重叠的话,遍历A,卡住每个A[i]作为target去B[]里面找最接近的,可以使用二分法

     1 int smallestDifference(vector<int> &A, vector<int> &B) {
     2         // write your code here
     3         if(A.size()<=0 || B.size()<=0){
     4             return 0;
     5         }
     6         sort(A.begin(), A.end());
     7         sort(B.begin(), B.end());
     8         
     9         if(A[A.size()-1] <= B[0]){
    10             return abs(B[0]-A[A.size()-1]);
    11         }
    12         else if(B[B.size()-1] <= A[0]){
    13             return abs(A[0]-B[B.size()-1]);
    14         }
    15         else{
    16             int result=INT_MAX;
    17             int low, mid, high;
    18             for(int i=0;i<A.size();i++){
    19                 low=0;
    20                 high=B.size()-1;
    21                 while(low<=high){
    22                     mid=low+(high-low)/2;
    23                     if(A[i]==B[mid]){
    24                         return 0;
    25                     }
    26                     else if(A[i]>B[mid]){
    27                         low=mid+1;
    28                     }
    29                     else if(A[i]<B[mid]){
    30                         high=mid-1;
    31                     }
    32                 }
    33                 result=min(result, abs(A[i]-B[mid]));
    34                 if(mid > 0) {
    35                     result = min(result, abs(A[i] - B[mid - 1]));
    36                 }
    37                 if (mid < B.size() - 1) {
    38                     result = min(result, abs(A[i] - B[mid + 1]));
    39                 }
    40             }
    41             return result;
    42         }
    43         
    44     }

    注意二分法mid不可能取到数组的第一个或者最后一个,所以需要额外代码判断下。

  • 相关阅读:
    Oracle载体服务器迁移后,数据一致性校验脚本
    六、HDFS
    五、集群配置
    2、【Hadoop HDFS】Does not contain a valid host:port authority: pc_node01:8082
    1、【Hadoop Yarn】 ./sbin/start-yarn.sh时,报错there is no YARN_RESOURCEMANAGER_USER defined
    一、Thread
    Centos安装KDE
    四、ssh免密登录
    cell_滑动
    aircrack-ng破解WiFi密码
  • 原文地址:https://www.cnblogs.com/TheLaughingMan/p/8157128.html
Copyright © 2011-2022 走看看