Maximum Gap

Given an unsorted array, find the maximum difference between the successive elements in its sorted form.

Try to solve it in linear time/space.

Return 0 if the array contains less than 2 elements.

You may assume all elements in the array are non-negative integers and fit in the 32-bit signed integer range.

 

class Solution{
public:
    int maximumGap(vector<int>& nums){
        int n = nums.size();
        if( n < 2) return 0;
        
        int maxVal = *max_element(nums.begin(),nums.end());
        int minVal = *min_element(nums.begin(),nums.end());
        if( maxVal == minVal) return 0;
        
        int gap = int((maxVal-minVal)/n+1);
        vector<int> maxofBucket(n,INT_MIN);
        vector<int> minofBucket(n,INT_MAX);

        for(int i=0;i<n;i++){
            int bucketId = int((nums[i]-minVal)/gap);
            maxofBucket[bucketId] = max(nums[i],maxofBucket[bucketId]);
            minofBucket[bucketId] = min(nums[i],minofBucket[bucketId]);
        }

        int preMax = maxofBucket[0];
        int res = INT_MIN;
        for(int i=1;i<n;i++){
            if(minofBucket[i] != INT_MAX){
                res = max(res,minofBucket[i]-preMax);
                preMax = maxofBucket[i];
            }
        }
        return res;
    }
};

 

posted @ 2016-10-12 10:29  wxquare  阅读(168)  评论(0编辑  收藏  举报