164. Maximum Gap

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

Return 0 if the array contains less than 2 elements.

Example 1:

Input: [3,6,9,1]
Output: 3
Explanation: The sorted form of the array is [1,3,6,9], either
             (3,6) or (6,9) has the maximum difference 3.

Example 2:

Input: [10]
Output: 0
Explanation: The array contains less than 2 elements, therefore return 0.

Note:

  • You may assume all elements in the array are non-negative integers and fit in the 32-bit signed integer range.
  • Try to solve it in linear time/space.
static int x = []() { 
    std::ios::sync_with_stdio(false); 
    cin.tie(NULL); 
    return 0; 
}();
class Solution {
public:
    int maximumGap(vector<int>& A) {
        int n=A.size();
    if(n<2)
        return 0;
    int mx=*max_element(A.begin(),A.end());
    int mn=*min_element(A.begin(),A.end());
    double len=double(mx-mn)/double(n-1);
   if(len==0)
    return 0;
    vector<int>mx1(n,INT_MIN),mn1(n,INT_MAX);
    for(int i=0;i<n;i++)
    {
        int in=(A[i]-mn)/len;
        mx1[in]=max(mx1[in],A[i]);
        mn1[in]=min(mn1[in],A[i]);
    }
    int ans=0,prev=mx1[0];
    for(int i=1;i<n;i++)
    {
        if(mn1[i]==INT_MAX)
            continue;
        ans=max(ans,mn1[i]-prev);
        prev=mx1[i];
    }
    return ans;
    }
};


猜你喜欢

转载自blog.csdn.net/dongyu_1989/article/details/80447499
GAP
GAP