LeetCode 面试题 16.06. 最小差--二分查找

面试题 16.06. 最小差

给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差

示例:

输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8}
输出:3,即数值对(11, 8)

提示:

1 <= a.length, b.length <= 100000
-2147483648 <= a[i], b[i] <= 2147483647
正确结果在区间 [0, 2147483647] 内

题解

二分查找保证能过,但是双指针会更快,可以考虑下。

AC代码

class Solution {
public:
    typedef long long ll;
    set<int>q;
    int smallestDifference(vector<int>& a, vector<int>& b) 
    {
        for(int i=0;i<b.size();i++)
        q.insert(b[i]);
        ll base=1e18;
        for(int i=0;i<a.size();i++)
        {
            set<int>::iterator it;
            it = q.lower_bound(a[i]);
            if(it==q.end())
            {
                it--;
                base = min(base,abs((ll)*it-(ll)a[i]));
            }
            else if(it==q.begin())
            {
                base = min(base,abs((ll)*it-(ll)a[i]));
            }
            else
            {
                base = min(base,abs((ll)*it-(ll)a[i]));
                it--;
                base = min(base,abs((ll)*it-(ll)a[i]));
            }
        }
        return base;
    }
};

LeetCode 面试题 16.06. 最小差--二分查找_第1张图片

你可能感兴趣的:(LeetCode,二分查找,leetcode,面试)