标签:
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.
Credits:
Special thanks to @porker2008 for adding this problem and creating all test cases.
1 class Solution { 2 public: 3 int maximumGap(vector<int> &num) { 4 5 if(num.size()<2) 6 return 0; 7 8 sort(num.begin(),num.end()); 9 int max=0; 10 11 for(int i=0;i<num.size()-1;i++) 12 { 13 if(num[i+1]-num[i]>max) 14 max=num[i+1]-num[i]; 15 } 16 return max; 17 } 18 };
1 class Solution { 2 public: 3 int maximumGap(vector<int> &num) { 4 5 if(num.size()<2) return 0; 6 if(num.size()==2) return abs(num[0]-num[1]); 7 8 int n=num.size(); 9 int min,max,i; 10 11 min=max=num[0]; 12 13 for(i=0;i<num.size();i++) 14 { 15 if(min>num[i]) min=num[i]; 16 if(max<num[i]) max=num[i]; 17 } 18 19 // 找到区间间隔 20 //注意此处,也可以写成(max-min)/n+1,此时就不需要num.size()==2的边界条件了 21 int dis=(max-min)/(n-1)+1; 22 23 vector<vector<int> > bucket((max-min)/dis+1); 24 25 for(i=0;i<n;i++) 26 { 27 int x=num[i]; 28 int index=(x-min)/dis; 29 //把元素放入不同的区间中 30 if(bucket[index].empty()) 31 { 32 bucket[index].reserve(2); 33 bucket[index].push_back(x); 34 bucket[index].push_back(x); 35 } 36 else 37 { 38 if(bucket[index][0]>x) bucket[index][0]=x; 39 if(bucket[index][1]<x) bucket[index][1]=x; 40 } 41 } 42 43 int pre=0; 44 int gap=0; 45 46 //在相邻的区间中(区间内有元素的相邻区间)寻找最大的gap 47 for(i=1;i<bucket.size();i++) 48 { 49 if(bucket[i].empty()) continue; 50 51 int tmp=bucket[i][0]-bucket[pre][1]; 52 if(gap<tmp) gap=tmp; 53 pre=i; 54 } 55 return gap; 56 } 57 };
标签:
原文地址:http://www.cnblogs.com/reachteam/p/4245961.html