1、问题描述:给定一个整数数组,返回两个数字的索引,使它们相加的值等于一个特定的目标值。假设对于每个输入只有一种解决方案,并且您不可以两次同时使用相同的元素。
2、问题的示例:给定nums = [2,7,11,15], target = 9,因为nums[0] + nums[1] = 2 + 7 = 9,返回[0,1]。
3、输入与输出:vector<int> twoSum(vector<int>& nums, int target){}完成这个成员函数解决问题。
4、思路:这个可以使用哈希表一次搞定这个问题。当我们扫描整个数组,检查当前元素的补码是否已经存在于表中。如果存在,我们已经找到解决方案并立即返回。如果不存在就向表中插入该元素。
5、这一步提供我的打败9蚀卺垦肝7%的人的代码实现代码:class Solution {public: vector<稆糨孝汶;int> twoSum(vector<int>& nums, int target) { unordered_map<int,int > map; for(int i=0;i<nums.size();i++) { int val=nums[i]; auto iter=map.find(val); if (iter!=map.end()) { vector <int >vec{iter->second,i}; return vec; } map[target-val]=i; } }};
6、时间复杂度分析:时间复杂度:O(n)我们只遍历包含nn元素的列表一次。每次查找釉涑杵抑表只花费O(1)时间。空间复杂度:O(n)所需的额外空间取决于散列表中存储的项的数量,散列表最多存储n元素。