我在我的大学有以下问题:
从0到n - 1的整数排列,算法永远运行的最小n是多少?
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v;
v.push_back(3);
v.push_back(1);
v.push_back(0);
v.push_back(6);
v.push_back(2);
v.push_back(7);
v.push_back(5);
v.push_back(4);
int j = 0;
int i = 0;
for(i = 0; i < v.size(); i++)
{
if(v[i] > i)
{
j = i;
while( j < v.size() && v[j] >= j )
{
j = j + 1;
}
int temp = v[i];
v[i] = v[j];
v[j] = temp;
i = 0;
}
}
return 0;
}
我手动找到了排列 {3, 1, 0, 6, 2, 7, 5,4}。如果有人检查我的答案或找到更小的排列,我将不胜感激。
我尝试了很多排列,但不是通过蛮力,而是通过逻辑选择,我认为这是算法循环的最小序列。