电面 B家

Why Bloomberg?
蠡口 久
给定一个数列,找diff最小的pair
被鸽了两次的电面

给定一个数列,找diff最小的pair 这题请问lz咋做的?排序后再找嘛

对,我是先排序再找,但是感觉不是最优解

面试官有说啥嘛

多谢lz分享,祝早日拿到offer。
下面是用O(N)完成的第二题(c#,用SortedSet):

private int FindSmallestDiff(int[] nums)
{
    int len = nums.Length;
    if (len < 2) return 0;
    SortedSet<int> sSet = new SortedSet<int>();
    for (int i = 0; i < len; i++)
    {
        if (!sSet.Add(nums[i])) return 0;
    }
    int pre = int.MaxValue;
    int minDiff = int.MaxValue;
    foreach (int cur in sSet)
    {
        if (pre != int.MaxValue) minDiff = Math.Min(cur - pre, minDiff);
        if (minDiff == 1) return 1;
        pre = cur;
    }
    return minDiff;
   }

没说啥,直接下一题了