【桶排序】MAXIMUM GAP
来源:互联网 发布:大华网络监控 编辑:程序博客网 时间:2024/05/01 18:32
题目:leetcode
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.
提示:
假设题目中的排序数组是升序。
运用桶排序,把数组平均分成len组(len是数组元素个数),每组前闭后开,其中最后一组只有一个元素——最大值。
则最大的gap的来源只有一种可能:两个相邻非空的桶之间,“大桶最小值”减去“小桶最大值”之差。
若输入的数组中所有元素都相等时,程序返回0。
//返回值第一个是数组最小值,第二个数是数组最大值pair<int, int> minmax(const vector<int> &s){if (s.size()==1)return make_pair(s[0], s[0]);int rmin = INT_MAX, rmax = -1;for (size_t i = 0; i < s.size(); i++){rmin = min(rmin, s[i]);rmax = max(rmax, s[i]);}pair<int, int> res = { rmin, rmax };return res;}//把数组s的元素平均分成s.size()组,每组前闭后开,即类似 [a,b)vector<vector<int>> bucketsort(const vector<int> &s, const int size){pair<int, int> r = minmax(s);double interval = r.second - r.first;interval /= size - 1;vector<vector<int>> bucket(size);for (size_t i = 0; i < s.size(); i++){double temp=(s[i] - r.first) / interval;int index = temp;bucket[index].push_back(s[i]);}return bucket;}int FindMaxGap(const vector<int> &s){if (s.size() < 2)return 0;vector<vector<int>> bucket = bucketsort(s,s.size());//bucket[0]肯定非空,因为里面有最小值pair<int, int> r = minmax(bucket[0]);//把gap初始化为0,当输入的数组中所有元素都相等时,返回0int gap = 0, premax = r.second;for (size_t i =1; i < bucket.size(); i++){if (bucket[i].empty())continue;pair<int, int> t = minmax(bucket[i]);gap = max(gap,t.first - premax);premax = t.second;}return gap;}//测试代码 srand((unsigned)time(NULL));vector<int> n;for (int i = 0; i < 10; i++){int t = rand() % 100 + 1;n.push_back(t);cout << t << "\t";}cout << endl;cout << FindMaxGap(n) << endl;sort(n.begin(), n.end());for (int i = 0; i < 10; i++){cout << n[i] << "\t";}
0 0
- 【桶排序】MAXIMUM GAP
- 【leetcode 桶排序】Maximum Gap
- [leetcode][桶排序] Maximum Gap
- 由Maximum Gap,谈桶排序,基数排序和计数排序
- 164. Maximum Gap【H】【80】【桶排序】【VIP】
- 桶排序 -- 相邻最大差值,Maximum Gap(leetcode)
- Leetcode 164 Maximum Gap 桶排序好题
- Maximum Gap
- Maximum Gap
- Maximum Gap
- MAXIMUM GAP
- Maximum Gap
- Maximum Gap
- Maximum Gap
- Maximum Gap
- Maximum Gap
- Maximum Gap
- Maximum Gap
- plsql develper 复制中文 在粘贴 乱码的解决方案
- Web前端面试题 -- 集锦
- 为程序开发人员量身定制的12个目标
- Leetcode: Compare Version Numbers
- STM32f103学习1-----系列命名规则
- 【桶排序】MAXIMUM GAP
- redis-cli pipe 管道
- Palindrome Number
- LinkedList 的一个错误用法
- HTTP的长连接和短连接
- 获取指定窗口信息(坐标,窗口风格)
- PHP开发经验
- PowerDesigner使用方法
- Java之BigInteger(面试题12:打印1到最大的n位数)