LeetCode - Maximum Gap 题解
来源:互联网 发布:mac md文件阅读器 编辑:程序博客网 时间:2024/05/20 21:43
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.
题目要求O(N)复杂度
不过用O(NlogN)的map做桶也能过
1.
class Solution {public: int maximumGap(vector<int> &num) { int n = num.size(); if(n < 2){ return 0; } for(auto a : num){ Map[a] = true; } auto it = Map.begin(); int last = it->first; ++it; int ans = 0; for(; it != Map.end(); ++it){ ans = max(ans, it->first - last); last = it->first; } return ans; }private: map<int, bool> Map;};2. O(N)的算法,假设N个数的范围是A到B,那么答案一定不小于ceiling((B - A)/(N - 1))。所以桶的大小按照此值定义,最后的答案一定在间隔的桶中。
class Solution {public: int maximumGap(vector<int> &num) { int n = num.size(); if(n < 2){ return 0; } int B = *max_element(num.begin(), num.end()); int A = *min_element(num.begin(), num.end()); int len = (B - A - 1) / (n - 1) + 1; int b_num = (B - A) / len + 1; vector<Bucket> buckets(b_num); for(auto i : num){ int index = (i - A) / len; buckets[index].maxx = max(buckets[index].maxx, i); buckets[index].minn = min(buckets[index].minn, i); } int ans = 0; int last = A; for(int i = 0; i < b_num; ++i){ if(buckets[i].maxx == INT_MIN){ continue; } ans = max(ans, buckets[i].minn - last); last = buckets[i].maxx; } return ans; }private: struct Bucket{ int minn = INT_MAX; int maxx = INT_MIN; };};
0 0
- LeetCode - Maximum Gap 题解
- Maximum Gap|leetcode题解
- LeetCode 题解(84): Maximum Gap
- 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[Sort]: Maximum Gap
- [LeetCode] Maximum Gap
- leetcode maximum gap
- [LeetCode]Maximum Gap
- LeetCode OJ Maximum Gap
- LeetCode Maximum Gap
- LeetCode 初体验,卒。
- Linux系统下卸载DB2数据库软件
- 时间处理工具类TimeUtil
- 9.2.1、Libgdx的输入处理之轮询
- 转载]Linux 编写shell脚本(2)if for while
- LeetCode - Maximum Gap 题解
- xface禁用control+alt+backspace快捷键
- android修改浏览器主页
- java中相对路径,绝对路径问题总结
- Win7下“回收站已损坏,是否清空该驱动器上的回收站”解决方法
- android-禁止EditText自动弹出键盘
- CentOS6.5 Upgrade OpenSSH
- 如何选择适合的虚拟主机搭建博客
- Codefroces 383 A Milking cows