Leetcode01(力扣01):两数之和

Leetcode01(力扣01):两数之和_第1张图片
方法一:暴力解法(时间复杂度高)

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        for(int i=0;i<nums.size()-1;i++)
        {
            for(int j=i+1;j<nums.size();j++)
            {
                if(nums[i]+nums[j]==target)
                {
                    return{i,j};
                }
            }
        }
        return {};
    }
};
  • 注意第一个for和第二个for的边界
  • vector作为返回值类型 return{}(数组)

方法二:引入哈希表遍历
遍历数组,将遍历过的数组存入哈希表(key为数组值,value为数组位置,哈希表find找的是key)

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> m;
        for(int i=0;i<nums.size();i++)
        {
            //find返回迭代器,如果没有就返回末位置的迭代器end
            if(m.find(target-nums[i])!=m.end())
            return{m[target-nums[i]],i};
            m[nums[i]]=i;  //将值作为key,索引作为value
        }
        return {};  //找不到返回空数组
    }
};


注:unordered_map不自动排序且占用内存较大,但是查找复杂度为O(1)
Leetcode01(力扣01):两数之和_第2张图片

你可能感兴趣的:(Leetcode)