我正在尝试从耐心排序的第 1 阶段构建最长的子序列。这在 O(n log n) 中运行。然而,当试图从单个堆中构建最长的子序列时,我似乎无法提出比 O(n^2) 更快的任何东西。我正在使用的算法(在 C++ 中)如下。如果需要进一步解释,我可以做进一步的解释,我可以这样做。
vector<int> composeLIS(const vector<vector<int>>& piles)
{
vector<int> LIS;
int prev;
for (auto i = v.end()-1; i >= v.begin(); i--)
{
if (i == v.end() - 1)
{
auto j = i[i->size()-1][0];
LIS.push_back(j);
prev = j;
}
else
{
for (auto j = i->begin(); j < i->end(); j++)
{
if (prev > *j)
{
LIS.insert(LIS.begin(),*j);
prev = *j;
break;
}
}
}
}
return LIS;
}
有没有办法以比 O(n^2) 更好的复杂度组合子序列?