Я решал вопрос на leetcode.com.Вопрос 2сум.Ссылка: 2сум вопрос Следующее было лучшим решением, предоставленным кем-то:
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
class Solution{
public:
vector<int> twoSum(vector<int> &nums, int sum){
//write code here
int len = nums.size();
unordered_map<int, int> hashTable;
for(int i=0; i<len; i++){
int diff = sum - nums[i];
auto found = hashTable.find(diff);
if(found == hashTable.end()){
hashTable.insert(pair<int, int>{nums[i], i});
}
else{
return vector<int>{found->second, i};
}
}
}
};
int main()
{
vector<int> myArray;
vector<int> outputArray;
int sum,n,temp;
cout<<"enter the size of the array\n";
cin>>n;
cout<<"enter the integers\n";
for(int i=0; i<n; i++){
cin>>temp;
myArray.push_back(temp);
}
cout<<"enter the sum\n";
cin>>sum;
Solution s;
outputArray = s.twoSum(myArray, sum);
cout<<"["<<outputArray[0]<<","<<outputArray[1]<<"]"<<endl;
return 0;
}
В приведенном выше коде auto found = hashTable.find(diff);
как эта строка работает как hashTable, никогда не инициализировалась.Итак, как найти значение diff.И как тогда работает условие if?Когда я попытался напечатать содержимое hashTable, используя итератор, он вернул пустое значение, т.е. hashTable был пуст.Тогда как найти значение diff?Пожалуйста, помогите мне в понимании.Спасибо за все мнения.