Алгоритм 2 Sum с хешированием C ++ - PullRequest
0 голосов
/ 08 апреля 2020

Вопрос о моем коде (CPP) HyungJun GuWeek 4 · 2 часа назад я написал свой программный код назначения и думаю, что есть какая-то проблема.

Прежде чем задавать оригинальный вопрос, я попробовал пример экзамен для проверки правильности или неправильности моего кода.

Первоначальная проблема:

Цель этой задачи - реализовать вариант алгоритма 2-SUM, описанный в лекциях этой недели.

Файл содержит 1 миллион целых чисел, как положительных, так и отрицательных (может быть несколько повторений!). Это ваш массив целых чисел, в i ^ {th} i-й строке которого указан i ^ { th} i-я запись массива.

Ваша задача - вычислить количество целевых значений tt в интервале [-10000,10000] (включительно), чтобы в них были различные числа x, yx, y в входной файл, который удовлетворяет x + y = tx + y = t. (ПРИМЕЧАНИЕ: для обеспечения отличимости требуется сложение алгоритма из лекции в одну строку.)

Напишите свой числовой ответ c (целое число от 0 до 20001) в предоставленном месте.

[образец]

-3

-1

1

2

9

11

7

6

2

, и я получил правильный ответ, который равен 8, но всякий раз, когда я пытался скомпилировать мой код с исходной базой данных, он терпел неудачу.

Мне интересно, если мой код неправильный или мой компьютер не так.

Так что, плз, если кто-нибудь может мне помочь, дайте мне знать, в чем проблема. :)

Спасибо всем.

#include <unordered_set>
#include <fstream>
#include <iostream>
#define SIZE 1000000
#define MIN -10000
#define MAX 10000

using namespace std;

int main()
{
    fstream file;
    file.open("2sum.txt");

    long long data_[SIZE];
    for (int i = 0; i < SIZE; i++)
    {
        file >> data_[i];
    }

    unordered_set<long long> table;
    for (int i = 0; i < SIZE; i++)
        table.insert(data_[i]);

    int count = 0;

    for (long long i = MIN; i <= MAX; i++)
    {
        cout << "for " << i << " ~~ " << endl;
        unordered_set<long long> :: iterator itr = table.begin();

        for(itr = table.begin(); itr != table.end(); itr++)
        {
            long long y = i - (*itr);
            if(table.find(y) != table.end() && (*itr) != y)
            {
                cout << "found" << endl;
                count++; break;
            }

        }
    }

    cout << count << endl;

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...