Leetcode|Maximum Gap
来源:互联网 发布:驳程序员青春 编辑:程序博客网 时间:2024/05/21 10:59
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.
这题是桶排序的应用,其实不需要完全的排序。只需要计算出相邻桶之间的元素的差值。所以每个桶里面只需要维护两个元素即可,最大和最小的。
注意肯定有的桶是空桶,注意跳过。
桶的单位大小是(max-min)/nums.size()+1;
代码如下:
int maximumGap(vector<int>& nums) { if(nums.size()<2) return 0; int min=nums[0],max=nums[0]; for(int i=1;i<nums.size();i++) { min=min>nums[i]?nums[i]:min; max=max<nums[i]?nums[i]:max; } //得到了min和max,可以分桶了 int bucket_size=(max-min)/nums.size()+1; vector<vector<int> > bucket((max-min)/bucket_size+1); for(int i=0;i<nums.size();i++) { int index=(nums[i]-min)/bucket_size; if(bucket[index].empty()) { bucket[index].push_back(nums[i]); bucket[index].push_back(nums[i]); }else{ bucket[index][0]= bucket[index][0]>nums[i]?nums[i]:bucket[index][0]; bucket[index][1]= bucket[index][1]<nums[i]?nums[i]:bucket[index][1]; } } int prev=0; int maxgap=INT_MIN; for(int i=1;i<bucket.size();i++) { if(bucket[i].empty()) continue; int gap=bucket[i][0]-bucket[prev][1]; prev=i; maxgap=maxgap<gap?gap:maxgap; } return maxgap; }
leetcode的solution说明:
Suppose there are N elements and they range from A to B.
Then the maximum gap will be no smaller than ceiling[(B - A) / (N - 1)]
Let the length of a bucket to be len = ceiling[(B - A) / (N - 1)], then we will have at most num = (B - A) / len + 1 of bucket
for any number K in the array, we can easily find out which bucket it belongs by calculating loc = (K - A) / len and therefore maintain the maximum and minimum elements in each bucket.
Since the maximum difference between elements in the same buckets will be at most len - 1, so the final answer will not be taken from two elements in the same buckets.
For each non-empty buckets p, find the next non-empty buckets q, then q.min - p.max could be the potential answer to the question. Return the maximum of all those values.
- leetcode-Maximum Gap
- [LeetCode] Maximum Gap
- LeetCode Maximum Gap
- [leetCode] Maximum Gap
- leetcode 155: Maximum Gap
- LeetCode(164) Maximum Gap
- [LeetCode] Maximum Gap
- [leetcode 164] Maximum Gap
- [leetcode]Maximum Gap
- LeetCode - Maximum Gap 题解
- Maximum Gap|leetcode题解
- LeetCode[Sort]: Maximum Gap
- [LeetCode] Maximum Gap
- leetcode maximum gap
- [LeetCode]Maximum Gap
- LeetCode OJ Maximum Gap
- LeetCode Maximum Gap
- 【leetcode】 Maximum Gap
- 3.24
- 让我们一起Go(三)
- 查看并修改Oracle用户的密码(适用于10g,9i)
- 为什么String要设计成不可变的?
- eclipse的安装配置
- Leetcode|Maximum Gap
- v$session 的SERIAL# 是什么?
- 查看并修改Oracle用户的密码(适用于11g)
- 二叉树的子结构的判定
- ftrace介绍和使用
- captital
- Ubuntu14.04 更新源 方法 提升更新的下载速度
- OJ第二批——Problem J:填空题:静态成员---计算学生个数
- Basic Calculator II