【发布时间】:2017-01-16 12:30:25
【问题描述】:
我正在尝试编写一个有效的操作来搜索向量,具体确定三个 int 的存在(A1、A2、A3),其中 A1 > A2 && A2
所以给定 A {5,3,1,2,3},输出的运算:[3,1,2], [3,2,3],[5,1,3], [5, 1,2]
显而易见的方法是使用三个嵌套循环:
int my_function()
{
std::vector<int> A {3,5,3,1,2,3};
for(auto IT1 = A.begin(); IT != A.end(); IT1++)
{
for(auto IT2 = IT1 + 1; IT2 != A.end(); IT2++)
{
for(auto IT3 = IT2 + 1; IT3 != A.end(); IT3++)
{
if(*IT1 > *IT2 && *IT3 > *IT2)
{
//Do stuff
}
}
}
}
}
显然这是非常低效的,是否有任何已知的方法可以在单个循环中执行诸如此类的操作?还是比三个嵌套循环更有效?
【问题讨论】:
-
您可以将
*IT1 > *IT2移出IT3循环。 -
A2 > A2?你沃特? -
您想要任何、全部还是第一个有效的三元组?
-
@Jarod42 所有有效的三元组
-
在这种情况下,你会遇到 O(NNN),