c++-查找美丽置换的所有计数
发布时间:2022-08-23 05:50:43 340
相关标签: # golang
对于一个由整数组成的数组,其中每个整数在数组中最多出现 2 次,我必须计算漂亮排列的数量。
如果没有索引i使得 P i = P i+1其中i属于 [0, n-1),则排列是美丽的。
struct hashFunction
{
size_t operator()(const vector &myVector) const
{
std::hash hasher;
size_t answer = 0;
for (int i : myVector)
{
answer ^= hasher(i) + 0x9e3779b9 +
(answer << 6) + (answer >> 2);
}
return answer;
}
};
bool beautiful(vector&ds)
{
for(int i=0;i<ds.size();i++)
{
if(ds[i]==ds[i+1])
{
return false;
}
}
return true;
}
void permutation(vector&arr,int index,unordered_set<vector,
hashFunction> &unorderedsetOfVectors)
{
if(unorderedsetOfVectors.find(arr)!=unorderedsetOfVectors.end()) return ;
if(index==arr.size())
{
if(beautiful(arr)==true)
{
unorderedsetOfVectors.insert(arr);
return ;
}
}
for(int i=index;i<arr.size();i++)
{
swap(arr[index],arr[i]);
permutation(arr,index+1,unorderedsetOfVectors);
swap(arr[index],arr[i]);
}
}
int permutations(vector arr) {
unordered_set<vector,
hashFunction> unorderedsetOfVectors;
permutation(arr,0,unorderedsetOfVectors);
return unorderedsetOfVectors.size()%1000000007;
}
如何进一步优化此代码。
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报