Я решаю задачу о двух суммах. Шаги:
- Прочтите входной файл со следующим шаблоном:
7
1 7 3 4 7 9
Первая строка - целевой номер, вторая строка - числовая последовательность.
Числа могут быть в диапазоне 0
Если сумма двух чисел из числовой последовательности равна целевому числу, я записываю «1» в выходной файл.
Если нет чисел, сумма которых равна целевому числу, тогда я записываю «0» в выходной файл.
Мне нужно оптимизировать использование памяти в моем коде. Как я могу это сделать?
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <unordered_map>
#include <string>
#include <algorithm>
using namespace std;
int main() {
ifstream f1;
vector<int> nums;
string line;
string source;
//Open input file and read it to a string
f1.open("input.txt");
while (getline(f1, line, '\n')) {
source+=line + " ";
} f1.close();
//Parse the string into an int vector
stringstream parser(source);
int num;
while (parser >> num) { nums.push_back(num); }
//Clear used strings
line = "";
source = "";
//Get target number
int target = nums.at(0);
//Get number sequence
nums.erase(nums.begin());
bool flag = false;
//Check number sequence for two numbers sum of which equals the target number
unordered_map<int, int> mp;
for(int i=0;i<nums.size();i++){
if(mp.count(nums[i])==1){
flag = true;
break;}
mp[target-nums[i]]=i;
}
//Write the result into the output file
ofstream f2;
f2.open("output.txt");
f2 << flag;
f2.close();
}