我有一个int向量的向量,如下所示:
std::vector<std::vector<int>> vec_vec{{3,5,1,6},{2,4},...};
结果应为
Case1: {{1, 2, 3, 4}, {5, 6}}
Case2: {1,2,3,4,5,6}
Case3: {{1, 3, 5, 6}, {2, 4}}
我发现了很多方法,我找到的最好的方法需要复杂度O(n^2)
才能对它们进行排序。
case1
,case2
和case3
的最佳复杂性是什么?
那么编写本机(c ++ 11,c ++ 14)跨平台代码来排序该向量的最佳方法是什么? O(n^2)
是最好的复杂性吗?记忆也很重要。
我查看了此解决方案here,但似乎还需要O(n^2)
对矢量进行排序?
答案 0 :(得分:0)
最简单的情况是案例2.要解决这个问题,请创建一个临时的新向量,将所有元素移动到那里,然后对新向量进行排序。
std::vector<int> temp;
for (const auto& vec: vec_vec)
{
std::copy(vec.begin(), vec.end(), std::back_inserter(temp));
}
std::sort(temp.begin(), temp.end());
复制部分是O(n);排序部分是O(n log(n))。
要实施案例1,请将temp
中的元素复制回vec_vec
- 这应该很简单。