返回

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;


    }

如何进一步优化此代码。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像