题目

中文

https://leetcode-cn.com/problems/two-sum/
image.png

英文

题解

第一次

个人思考

暴力枚举一定可行,还是想不到其他方向。
看题解有人说 哈希表(因为哈希的查找时间复杂度O(1))。 码住,之后做。

  1. //a,b-->a+b=target
  2. class Solution {
  3. public:
  4. vector<int> twoSum(vector<int>& nums, int target) {
  5. int i,j;
  6. for(i=0;i<nums.size()-1;i++)
  7. {
  8. for(j=i+1;j<nums.size();j++)
  9. {
  10. if(nums[i]+nums[j]==target)
  11. {
  12. return {i,j};
  13. }
  14. }
  15. }
  16. return {i,j};
  17. };
  18. };

第二次

哈希表解决
a,b—>a+b=target
for each a:check (target-a) exists in nums
对应每一个a 查询target-a是否在哈希表里面。

  1. class Solution {
  2. public:
  3. vector<int> twoSum(vector<int>& nums, int target) {
  4. unordered_map<int, int> hashtable;
  5. for (int i = 0; i < nums.size(); ++i) {
  6. auto it = hashtable.find(target - nums[i]);
  7. if (it != hashtable.end()) {
  8. return {it->second, i};
  9. }
  10. hashtable[nums[i]] = i;
  11. }
  12. return {};
  13. }
  14. };

image.png