【leetCode】Maximum Gap
2016-09-17 14:33
274 查看
题意:给定一个数组,返回排序之后的相邻元素差的最大值。在o(n)的时间和空间复杂度完成
思路:二进制的拓扑排序。两个桶,一个是0,一个是1,从低位开始排,32次(一个月前给小孩子讲过)
代码如下:
int maximumGap(vector<int>& nums) {
vector<int> zeroes;
vector<int> ones;
int i,j,k,size=nums.size();
for(i=0;i<32;i++)
{
for(j=0;j<size;j++)
{
if(((nums[j]>>i)&1)==0) zeroes.push_back(nums[j]);
else ones.push_back(nums[j]);
}
nums.clear();
for(j=0;j<zeroes.size();j++) nums.push_back(zeroes[j]);
for(j=0;j<ones.size();j++) nums.push_back(ones[j]);
zeroes.clear();
ones.clear();
}
k=0;
for(i=1;i<size;i++) k=max(k,nums[i]-nums[i-1]);
return k;
}
思路:二进制的拓扑排序。两个桶,一个是0,一个是1,从低位开始排,32次(一个月前给小孩子讲过)
代码如下:
int maximumGap(vector<int>& nums) {
vector<int> zeroes;
vector<int> ones;
int i,j,k,size=nums.size();
for(i=0;i<32;i++)
{
for(j=0;j<size;j++)
{
if(((nums[j]>>i)&1)==0) zeroes.push_back(nums[j]);
else ones.push_back(nums[j]);
}
nums.clear();
for(j=0;j<zeroes.size();j++) nums.push_back(zeroes[j]);
for(j=0;j<ones.size();j++) nums.push_back(ones[j]);
zeroes.clear();
ones.clear();
}
k=0;
for(i=1;i<size;i++) k=max(k,nums[i]-nums[i-1]);
return k;
}
相关文章推荐
- 详解图的应用(最小生成树、拓扑排序、关键路径、最短路径)
- 初学图论-Kahn拓扑排序算法(Kahn's Topological Sort Algorithm)
- HDU 3342
- 2367:Genealogical tree
- HiHoCoder_#1174 : 拓扑排序·一
- HiHoCoder_#1175 : 拓扑排序·二
- hdu 1285 确定比赛名次 (简单的拓扑排序)
- hdu 2049 产生冠军(拓扑排序)
- [BZOJ2330][SCOI2011][拓扑排序][强连通分量][Tarjan]Candy
- Course Schedule
- LeetCode Course Schedule II
- 【Leetcode】Course Schedule II #210
- poj1094 拓扑排序
- (转)拓扑排序
- [leetcode]Course Schedule
- poj_1094
- cf_290(div2)A,B,C
- 图论算法(1)--- 如何求每一个节点在DAG中的最大深度
- POJ 3687 Labeling Balls
- [bzoj4562][Haoi2016]食物链(拓扑序+dp)