Arithmetic problem | 最大间距

来源:互联网 发布:哈利波特校服淘宝 编辑:程序博客网 时间:2024/05/11 21:12

题目如下:

给定一个未经排序的数组,请找出其排序表中连续两个要素的最大间距。

如果数组中的要素少于 2 个,请返回 0。使用线性的时间和空间复杂度的方法解决这个问题。


样例

给定数组 [1, 9, 2, 5],其排序表为 [1, 2, 5, 9],其最大的间距是在 5 和 9 之间,= 4.


解题思路:

这题目明显是要排序操作的,但快排的时间复杂度不是线性的,因此也无需考虑。因为还需要使用线性的空间复杂度来解题,因此本人选择唯一标记方法来达到解题目的,那么只要标记本来已排序,也就无需考虑其他因素,直接遍历出结果即可,且标记本身已为线性空间,符合题意。标记上,本人还是一如既往的喜欢位标记,那么就如以前那般使用bitset吧,当然也可以使用数组,看情况而定吧。使用bitset可以忽略重复元素的标记,并且在遍历结果是还能剩下不少力气,何乐而不为。


思路代码实现如下:

#define max(a,b) a>b?a:b#define min(a,b) a<b?a:b#define max_num 10int Method(int *i,int len){if (len < 2) return 0;bitset<max_num> *bitset_=new bitset<max_num>;int min_ = i[0], max_ = min_, res_ = 0, temp_ = 0;for (int a = 0; a < len; ++a){bitset_->set(i[a], true);min_ = min(min_, i[a]);max_ = max(max_, i[a]);}for (int i = min_; i < max_ + 1; ++i){if (!bitset_->test(i))temp_++;elseres_ = max(temp_, res_), temp_ = 0;}delete bitset_;return res_ + 1;}



9 0