小编use*_*901的帖子

找到所有连接对的总和的高效算法

我参加了 CodeSignal 练习考试,并且能够通过 14/16 测试用例来解决这个问题。您将获得一个向量作为输入(整数列表),并且解决方案将很长很长。

最初我只是使用了两个 for 循环的蛮力解决方案,并将当前的 a[i] concat a[j] 添加到运行总数中。但是,我尝试通过使用记忆来优化它。我使用 unordered_map 对检查我是否已经计算了 (i,j) 对,如果已经计算,只需返回缓存的结果。即使进行了优化,我仍然没有通过任何额外的测试用例并收到 14/16 的结果。我缺少什么见解或优化?

我发现了类似的在线问题,但是他们的见解似乎不适用于这个特定问题。

例如:类似问题

题:

给定一个正整数数组a,您的任务是计算每个可能的 concat(a[i], a[j]) 的总和,其中 concat(a[i],a[j]) 是字符串的串联分别表示 a[I] 和 a[j]。

前任:

a = [10,2]
sol = 1344
a[0],a[0] = 1010
a[0],a[1] = 102
a[1],a[0] = 210
a[1],a[1] = 22
sum of above = 1344
Run Code Online (Sandbox Code Playgroud)

代码:

long long concat(int x, int y)
{
  string str = to_string(x)+to_string(y);
  return stoll(str);
}
long long calculateSum(vector<int> a)
{
  unordered_map<pair<int,int>,long long, hash_pair> …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm combinatorics

4
推荐指数
2
解决办法
4749
查看次数

为什么我的插入排序没有得到第一个元素?

我的插入排序对每个数字进行排序,但第一个数字除外。它从第二个元素到最后一个元素排序,但它从不包括第一个元素。我的插入排序有什么问题。我根据 CLRS 一书的伪代码编写了这段代码,我无法调试它的问题。

#include <iostream>
void InsertSort(int data[], int length)
{
    //std::cout<<length<<std::endl;
    for(int j = 1; j < length; j++)
    {
        int key = data[j];
        int i = j - 1;
        while(i > 0 && data[i] > key)
        {
            data[i + 1] = data[i];
            i--;
        }
        data[i+1] = key;
    }
    for(int x = 0; x < length; x++)
    {
        std::cout<<data[x]<<" ";
    }
    std::cout<<std::endl;
}


int main(int argc, const char * argv[])
{
    // insert code here...
    //std::cout << "Hello, World!\n"; …
Run Code Online (Sandbox Code Playgroud)

c++ arrays sorting

0
推荐指数
1
解决办法
258
查看次数

标签 统计

c++ ×2

algorithm ×1

arrays ×1

combinatorics ×1

sorting ×1