相关疑难解决方法(0)

使用索引向量重新排序向量

我想重新排序向量中的项目,使用另一个向量来指定顺序:

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()?

c++ stl vector

34
推荐指数
3
解决办法
2万
查看次数

分组anagram词的算法

给定一组单词,我们需要找到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 [])方法.

algorithm data-processing anagram

19
推荐指数
3
解决办法
2万
查看次数

标签 统计

algorithm ×1

anagram ×1

c++ ×1

data-processing ×1

stl ×1

vector ×1