給出k個塊的系列(k1,k2,...,ki)。每個塊從位置ai開始,結束於位置bi,其高度爲1.塊連續放置。如果該塊與另一塊重疊,則將其附着在其頂部。我的任務是計算最高的街區。 我創建了一個算法,其時間複雜度約爲O(n^2),但我知道使用skiplist有更快的解決方案。放置塊並計算最高塔的高度
#include <iostream>
struct Brick
{
int begin;
int end;
int height = 1;
};
bool DoOverlap(Brick a, Brick b)
{
return (a.end > b.begin && a.begin < b.end)
}
int theHighest(Brick bricks[], int n)
{
int height = 1;
for (size_t i = 1; i < n; i++)
{
for (size_t j = 0; j < i; j++)
{
if (bricks[i].height <= bricks[j].height && DoOverlap(bricks[i], bricks[j]))
{
bricks[i].height = bricks[j].height + 1;
if (bricks[i].height > height)
height = bricks[i].height;
}
}
}
return height;
}
That's an example drawing of created construction.
你的問題是什麼?你的代碼在哪裏? –
你可以分享你創建的算法嗎? – neuhaus
ai,bi的範圍是多少? – sourabh1024