LeetCode刷题笔记0001 Two Sum

LeetCode刷题笔记0001 Two Sum


题目:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

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

本题不用直接建立主函数,主函数在题目中包含了直接一个调用函数就可以了。
除了暴力解法之外,主要可以用哈希表的方式进行优化。
其实就是使用map将下标存在数值中,这样可以直接target-nums[i]监测是否有目标值。
map函数的内部函数:find、count.

map<int,int>a;
a.find(i);//寻找地址为i的存放值
a.count(i);//查询地址为i的个数

二次哈希表
一遍进行哈希表存储,一遍进行查找(从前往后)
空间换时间

class Solution{
    public:
    vector<int> twoSum(vector<int> &nums,int target){
        vector<int> a(2,-1);
        map<int,int> m;
        //哈希表的存储
        for(int i = 0;i<nums.size();++i)
            m[nums[i]] = i;
        //查找
        for(int i = 0;i<nums.size();++i){
            if(m.count(target - nums[i]) > 0 && m[target - nums[i]] != i){
                a[0] = i;
                a[1] = m[target - nums[i]];
                break;
            }
        }
        return a;
    };
};

一次哈希表
直接在后面进行存储,同时往前进行查找,可以少一个循环

for(int i = 0;i<nums.size();++i){
            if(m.count(target - nums[i]) > 0 && m[target - nums[i]] != i){
                a[1] = i;
                a[0] = m[target - nums[i]];
                break;
            }
            m[nums[i]] = i;
        }

你可能感兴趣的:(LeetCode刷题笔记0001 Two Sum)