两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。  

示例:

给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]  

一如之前的那样还是哈希表。先把数组所有元素以[ num[i] , i ]的形式存入哈希表,然后通过循环里访问(target-key)看看是否能在map里访问到(访问到的两点要素:①find()结果不为end(),②find()结果不为key本身),把访问到的value返回,就能给出两数之和。

不过实际操作起来遇到了一些坑。

在向map添加元素时,用了Insert没有用下标法,导致遇到重复的key值,value没法更新。

numMap.insert(pair<int,int>(nums[i], i)); //举例 [3,2,3] target=6

放代码:

public: vector<int> twoSum(vector<int>& nums, int target)

{

        unordered_map<int,int> numMap;

        const int len=nums.size();

        int i=0;

        for(;i<len;i++)

        {

                numMap[nums[i]]=i;

        }

        i=0; //之前将i赋值为0写在下面for循环体条件内结果有个例子一直过不了

        for(;i<len;i++)

        {

                if(numMap.find(target-nums[i])!=numMap.end()&&numMap[target-nums[i]]!=i)                 {

                        break;

                }

        }

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。