Leetcode 1. 两数之和

79 阅读1分钟

1. 两数之和 - 力扣(LeetCode)

暴力求解

刚开始只用了一个for循环,只考虑了两个相邻数字相加等于target的情况:

image.png

image.png






修改

然后加了层for循环,让i先停在第一个位置,j去拿剩下位置和第一个位置值作对比,然后i再跳到第二个位置,以此类推,每个位置的值都可以和剩下位置进行对比,因此时间复杂度最大应该为O(n^2)。但是不用比完就可以找到要的结果,因此勉强可以过题目要求的<O(n^2):

image.png

image.png

也可以直接这样返回:if(nums[i]+nums[j]==target ) return {i,j}

两个for循环结束都没有返回,说明没有这两个值不存在,最后 return { }即可,这是vector的初始化列表形式:

image.png





这个题目的本意是让我们练习哈希表,题目说到You may assume that each input would have exactly one solution,即您可以假设每个输入都只有一个解决方案:

map哈希

梦开始的地方,Leetcode:1.两数之和,学透哈希表,map使用有技巧!_哔哩哔哩_bilibili

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

                auto iter=m.find(s);
       if(iter!=m.end())
       {
           //找到了
           return {iter->second,i};
       }
       else
       m.insert(pair<int,int>(nums[i],i));

        }


return {};
    }
};