Maximum Gap -- leetcode
来源:互联网 发布:梦里花落知多少微盘 编辑:程序博客网 时间:2024/06/03 12:41
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 gap的下限值。
span = ceiling[(B - A) / (N - 1)]
其中,B为最小值,A为最大值,N为元素个数
如果以此span作为一个桶的取值范围。 并将数分配进这些桶内。
那么在同一个桶内的数,之间的有序gap,将不会超过span。则桶内的数的,彼此之间就不用再求gap。
只需要计算桶与桶之间的gap,并保留最大值。
而桶与桶之间的gap,则是后一桶的最小值,与 前一桶的最大值之间的差值。
故在分配时,只需要记住该桶内的最小值,和最大值。
class Solution {public: int maximumGap(vector<int>& nums) { if (nums.size() < 2) return 0; int minV = nums[0]; int maxV = nums[0]; for (auto i: nums) { if (i < minV) minV = i; else if (i > maxV) maxV = i; } if (maxV == minV) return 0; int span = (maxV-minV) / (nums.size()-1); span = max(1, span); int buckets_count = (maxV-minV)/span; ++buckets_count; vector<int> buckets_min(buckets_count, INT_MAX); vector<int> buckets_max(buckets_count, INT_MIN); for (auto i: nums) { int slot = (i-minV) / span; buckets_min[slot] = min(buckets_min[slot], i); buckets_max[slot] = max(buckets_max[slot], i); } int gap = 0; int last_max = buckets_max[0]; for (int i=1; i<buckets_count; i++) { if (buckets_max[i] != INT_MIN) { gap = max(gap, buckets_min[i]-last_max); last_max = buckets_max[i]; } } return gap; }};
0 0
- 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
- 【MyBatis框架】mapper配置文件-关于动态sql
- SQLiteDatabase
- 可用性 Availability 和可靠性Reliability
- 饮料换购
- Python计算地图上两点经纬度间的距离
- Maximum Gap -- leetcode
- 转换函数
- 子View按规则自动移动Layout
- 第十五周oj刷题——Problem B: 矩形类定义【C++】
- HTTP内容篡改实践
- 【MyBatis框架】mapper配置文件-foreach标签
- 黑马程序员_面向对象
- 砖8 跑filebenchtrace
- Leetcode 223 Rectangle Area