leetcode 1 Two sum(两数相加)

题目要求

给定一个整数数组,返回两个数字的索引,使它们加起来成为一个特定的目标。
假设每个输入只有一个解决方案,并且不会两次使用相同的元素。

输入示例

Example:

Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].

思路

1、暴力遍历,两层。能找到答案,但是时间复杂度较高。
2、使用哈希表,根据 nums[i] + nums[j] = target,当前遍历元素已知是nums[i],且目标target已知,所以只要判断**nums[j]**即可。如果nums[j]在哈希表中,那么返回i,j的索引, 否则把[ nums[j], j ] 加入到哈希表中,形式为本身元素为key,元素的索引下标为value。

主要代码 c++

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
    unordered_map<int,int> map; // 构建哈希表,unordered_map的实现就是哈希
    vector<int> ans;
    for(int i=0;i<nums.size();++i)
    {
        int complement = target - nums[i];
        if(map.count(complement)>0) // 如果“nums[j]”在哈希表中
        {
            ans.push_back(map[complement]); // 返回“nums[i],nums[j]”的索引,即整数的下标
            ans.push_back(i);
            return ans;
        }
        map.insert(make_pair(nums[i],i)); // 哈希表的存储形式:key(整数):value(整数对应的下标)
    }
        return ans;
    }
};

解题关键:找到nums[i] + nums[j] = target这个方程,以及正确使用哈希表的存放。

原题链接:https://leetcode.com/problems/two-sum/

猜你喜欢

转载自blog.csdn.net/qq_37466121/article/details/85141866
今日推荐