1. 程式人生 > >164 Maximum Gap 最大間距

164 Maximum Gap 最大間距

++ body 有符號 script tor grand solution pro blog

給定一個無序的數組,找出數組在排序後相鄰的元素之間最大的差值。
盡量嘗試在線性時間和空間復雜度情況下解決此問題。
若數組元素個數少於2,則返回0。
假定所有的元素都是非負整數且範圍在32位有符號整數範圍內。

詳見:https://leetcode.com/problems/maximum-gap/description/

class Solution {
public:
    int maximumGap(vector<int> &nums) {
        int n=nums.size();
        if (n==0||nums.empty())
        {
            return 0;
        }
        int mx = INT_MIN, mn = INT_MAX;
        for (int val : nums) 
        {
            mx = max(mx, val);
            mn = min(mn, val);
        }
        int size = (mx - mn) / n + 1;
        int bucket_nums = (mx - mn) / size + 1;
        vector<int> bucket_min(bucket_nums, INT_MAX);
        vector<int> bucket_max(bucket_nums, INT_MIN);
        set<int> s;
        for (int val : nums)
        {
            int idx = (val - mn) / size;
            bucket_min[idx] = min(bucket_min[idx], val);
            bucket_max[idx] = max(bucket_max[idx], val);
            s.insert(idx);
        }
        int pre = 0, res = 0;
        for (int i = 1; i < n; ++i)
        {
            if (!s.count(i))
            {
                continue;
            }
            res = max(res, bucket_min[i] - bucket_max[pre]);
            pre = i;
        }
        return res;
    }
};

參考:https://www.cnblogs.com/grandyang/p/4234970.html

164 Maximum Gap 最大間距