1.两数之和

tech2022-08-30  118

方法一:两遍哈希表

函数代码一:

class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int> m; for(int i=0;i<nums.size();i++) { m[nums[i]]=i; } for(int i=0;i<nums.size();i++) { //存在索引值覆盖问题,比如nums[7]=42,nums[9]=42,结果后面的索引9会去覆盖前面的7索引的值 //比如42+42=84,返回{7,9} if(m.find(target-nums[i])!=m.end()&&m[target-nums[i]]!=i) { return {i,m[target-nums[i]]}; } } return {}; } };

方法二:一遍哈希

class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int>m; for(int i=0;i<nums.size();i++) { if(m.find(target-nums[i])!=m.end()&&m[nums[i]]!=i) { return {m[target-nums[i]],i}; } m[nums[i]]=i; } return {}; } };

方法三:暴力法+双指针

方法四:二分查找

最新回复(0)