题目
N个未排序的整数,在线性时间内,求这N个整数在数轴上相邻两个数之间的最大差值?
分析
题目指明了要求为线性时间内,也就是
然后再求得位图中 两个 1 之间的最大距离,此处约定相邻两点间距离为1;
程序
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
int maxDistance(const vector<int> &v)
{
if (v.empty())
return 0;
//申请一个位图,(约定整数为100以内),否则位图大小应申请 INT_MAX
int *bitMap = new int[100];
//初始化位图,值全部为0
for (int i = 0; i < 100; i++)
bitMap[i] = 0;
//所给元素的个数
int len = v.size();
//设置该元素所在位图坐标值为1
for (int i = 0; i < len; i++)
{
bitMap[v[i]] = 1;
}
//maxdix值初始化为0,pos 记录第一个所给元素所在位置 , 声明一个临时变量c用于记录走过的所给元素个数,控制循环终止
int maxdis = 0 , pos =0 , c = 0 , tmp = 0 ;
for (int i = 0; i < 100; i++)
{
if (bitMap[i] == 1)
{
pos = i;
break;
}//if
}//for
//pos位置处有第一个初始元素
c = 1;
for (int i = pos+1; i < 100 && c <= len; i++)
{
if (bitMap[i] == 0)
{
tmp++;
}//if
else{
//以相邻两点距离为1计算
tmp++;
if (tmp > maxdis)
{
maxdis = tmp;
}//if
tmp = 0;
c++;
}//else
}//for
return maxdis;
}
int main()
{
vector<int> v = { 2, 3, 56, 23, 67, 8, 1, 45, 89 , 99 };
int maxdis = maxDistance(v);
cout << maxdis << endl;
system("pause");
return 0;
}
注:题目是听朋友描述,记录下来,日后参考!