个人技术分享

1. 两数之和

题目描述

在数组中找到两个数的和为target的下标。注意返回的2个下标的不能相等。

思路

用哈希表存储数组中的每个元素。
根据nums[i]+nums[j]=target
在遍历整个数组的时候——可以确定nums[i]
那么就可以确定nums[j]=target-nums[i]
为了避免出现返回2个下标相同的情况
边遍历元素边存储到哈希表中,这样当前的值没有进入哈希表就不会被查找到。

其他思路

双重循环O(N^2)
排序(注意用一个数组存储下标同时排序)+双指针O(N*logN)

代码

class Solution {

public:

    vector<int> twoSum(vector<int>& nums, int target) {

        unordered_map<int,int> hash;

        hash[nums[0]]=0;

        for(int i=1;i<nums.size();i++)

        {

            if(hash.count(target-nums[i]))

                return {i,hash[target-nums[i]]};

            hash[nums[i]]=i;

        }

        return {};

    }

};