我想重新排序向量中的项目,使用另一个向量来指定顺序:
char A[] = { 'a', 'b', 'c' };
size_t ORDER[] = { 1, 0, 2 };
vector<char> vA(A, A + sizeof(A) / sizeof(*A));
vector<size_t> vOrder(ORDER, ORDER + sizeof(ORDER) / sizeof(*ORDER));
reorder_naive(vA, vOrder);
// A is now { 'b', 'a', 'c' }
Run Code Online (Sandbox Code Playgroud)
以下是一个低效的实现,需要复制向量:
void reorder_naive(vector<char>& vA, const vector<size_t>& vOrder)
{
assert(vA.size() == vOrder.size());
vector vCopy = vA; // Can we avoid this?
for(int i = 0; i < vOrder.size(); ++i)
vA[i] = vCopy[ vOrder[i] ];
}
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法,例如,使用swap()?
给定一组单词,我们需要找到anagram单词并使用最佳算法单独显示每个类别.
输入:
man car kile arc none like
Run Code Online (Sandbox Code Playgroud)
输出:
man
car arc
kile like
none
Run Code Online (Sandbox Code Playgroud)
我现在开发的最佳解决方案是基于散列表,但我正在考虑将anagram字转换为整数值的等式.
示例:man =>'m'+'a'+'n'但这不会给出唯一值.
有什么建议吗?
请参阅C#中的以下代码:
string line = Console.ReadLine();
string []words=line.Split(' ');
int[] numbers = GetUniqueInts(words);
for (int i = 0; i < words.Length; i++)
{
if (table.ContainsKey(numbers[i]))
{
table[numbers[i]] = table[numbers[i]].Append(words[i]);
}
else
{
table.Add(numbers[i],new StringBuilder(words[i]));
}
}
Run Code Online (Sandbox Code Playgroud)
问题是如何开发GetUniqueInts(string [])方法.