让v = {1,2,3,4,5,6}
。我想使用v
生成以下几组:
为了实现这个目标,我使用以下代码,使用嵌套的for循环:
#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int> v{1,2,3,4,5,6};
for(unsigned int i = 0; i < v.size(); i++)
{
cout << v[i] <<",";
for(unsigned int j = 0; j < v.size(); j++)
{
if(i != j)
cout << v[j] <<",";
}
cout << endl;
}
return 0;
}
是否有更好的方法可用于生成先前的集合。至少不是O(n^2)
。
答案 0 :(得分:4)
对于大小为public static class Enums
{
public enum A
{
first,
second
}
public enum B
{
first,
second,
third
}
}
的输入列表,您的输出将始终包含n
个数字。你不能比O(n ^ 2)做得更好。
然而,在我看来,你只是交换第一个和第一个元素,然后是第一个和第二个元素,然后是第一个和第三个元素等等。 您可以隐藏使用算法打印特定子集的内部循环,例如
n*n
答案 1 :(得分:1)
了解算法的下限;让我们看一下输入和输出之间的转换。
您从 N 元素列表开始,最后得到 [N x(N - 1)] 元素的列表。
忽略生成输出的逻辑,输出自身的行为是O(N * (N - 1))
=&gt;为O(n 2 )。
换句话说,你在N的初始输入上输出NxN项目。根据定义,这将是O(n 2 )。
答案 2 :(得分:-1)
此处内循环仅用于打印结果:
public void method1() throws MyException {
try {
methodIO();
} catch (IOException e) {
// Handle appropriately.
}
}