求Maximim Gap 排序后的两个相邻元素之间的最大差值
来源:互联网 发布:矩阵秩的性质 编辑:程序博客网 时间:2024/05/19 20:20
方法、桶排序
为了满足O(n)复杂度,尝试计数排序,但是会TLE。因此使用桶排序来做
计数排序可以看做是桶大小为1的桶排序,但由于桶数目太多导致遍历时间过长
最大gap肯定是出现在后一个有效桶的min与前一个有效桶的max之间
(“有效”指的是忽略空桶)
步骤思路:
1、数组中有N个元素,最小元素为min、最大元素为max
2、平均间隔为gap = ceil( (max - min) / (N - 1)) ceil指结果向上取整
3、总共分成 bucketCount =ceil((max - min)/ gap ) 个区间(一个区间也就是一个桶),每个区间元素范围是 [ min + k * gap , min + (k + 1) * gap )
4、每个元素对应的桶号(区间)为 bucketNum = (kVal - min)/ gap
桶排序,由于num中的数字肯定在[min,max]区间内
所以根据抽屉原理,假设num中有n个数字,则最大的gap必然要大于dis=(max-min)/(n-1)
所以我们可以把num所在的范围分成等间隔的区间,相邻区间内的元素之间的最大差值,即为要寻找的gap
class MaxDivision {public:int findMaxDivision(vector<int> A, int n) {if (n < 2)return 0;// write code hereint max_val = *max_element(A.begin(), A.end());int min_val = *min_element(A.begin(), A.end());//平均间距一定要向上取整,只能多不能少,因为少了会导致计算桶号时比实际的偏大以至于超过桶数int avg_gap = ceil((double)(max_val - min_val) / (n - 1));//first is the min value of this bunket,second is the max value of this bunket//桶的数量直接 n - 1 就行了vector<std::pair<int, int>> bunket(n - 1, make_pair(INT_MAX, INT_MIN));for (auto num : A) {if (num == max_val || num == min_val)continue;int bunket_num = (num - min_val) / avg_gap;if (num < bunket[bunket_num].first)bunket[bunket_num].first = num;if (num > bunket[bunket_num].second)bunket[bunket_num].second = num;}int maxGap = 0; //return valueint lastMax = min_val;for (auto val : bunket) {if (val.first == INT_MAX)continue;int tmp = val.first - lastMax;maxGap = tmp > maxGap ? tmp : maxGap;lastMax = val.second;}int tmp = max_val - lastMax;maxGap = tmp > maxGap ? tmp : maxGap;return maxGap;}};
0 0
- 求Maximim Gap 排序后的两个相邻元素之间的最大差值
- 求数组排序后相邻两个数的最大差值
- Maximum Gap 寻找数组中排序后相邻两个数的最大差值,桶排序,O(n)
- 求数组排序后相邻数的最大差值
- 实数序列,求值相邻的两个元素的最大差值
- 无序数组排序后的最大相邻差值求解
- 无序数组O(n)时间找到排序后的两个相邻元素使得他们之间的差最大
- 排序相关—— 相邻两数的最大差值( Maximum Gap-LeetCode)
- 两个相邻时间之间的差值计算
- 求一个数组中两个元素的最大差值
- 桶排序 -- 相邻最大差值,Maximum Gap(leetcode)
- 一个无序实数数组中的相邻两个元素的最大差值
- 无序数组求相邻元素最大差值(tiger基金的笔试题)
- 【算法题】求有序数列中相邻数字之间的最大差值
- 数据结构之——找到无序数组中排序后相邻元素差值的最大值
- 数据结构之——找到无序数组中排序后相邻元素差值的最大值
- 数组排序之后相邻数的最大差值
- 数据排序之后相邻数的最大差值
- ARM平台嵌入式Linux下SPI设备连接
- unity shader入门
- 数据库事务(三)
- 分布式开发 | 服务器划分简介
- objective-c 中 category 和 extension 的区别
- 求Maximim Gap 排序后的两个相邻元素之间的最大差值
- 开启ssh服务
- 详解window.history
- Shell排序
- android中File文件的读的实现
- Distinctive Image Features from Scale-Invariant Keypoints(SIFT)
- python 异常 try-except句型
- Linux下的多路复用和unix套接字的综合使用
- Mantle