两数之和

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

code:

class Solution{
public:
    vector<int> twoSum(vector<int>& nums, int target){
        unordered_map<int , int>hashtable;//定义哈希表
        for(int i = 0; i < nums.size(); ++i){
            auto it = hashtable.find(target - nums[i]);//auto为自动定义it的类型,这里是map的每一个pair,每个pair拥有value和key
            if(it != hashtable.end()){//如果能找到,返回下标(这里要知道map中pair的first是key,second是value)
                return(it->second, i);
            }
            hashtable[nums[i]] = i;//这里填充hash表,这样操作可以不用单独将数组全部填充到hash表中,nums是key,i是value
        }
        return{};
    }
};   

注意点:
1.for循环中的i++与++i:如果只是一条单独语句,没区别,比方说for(i=0;i<9;i++)与for(i=0;i<9;++i)都表示每次f0r循环结束时i+1后判断i是否<9再进入下一次循环。或者是循环内部的i++;及++i;也同理。但是对于数据量大的时候,++i的空间空间复杂度要小于i++,因为++i直接将i加1,而i++则需要开辟一个临时的变量来转存i。
但如果不是单独语句,就有区别:比如n=++i;和n=i++;n赋的值就不同,前者n的值为i,i再+1,后者n的值为+1后的i值。再有把一个数组的值赋到另一个数组中时,y[j++]=x[i];与y[++j]=x[i];也不同y数组开始储存的起点不同。

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

推荐阅读更多精彩内容

  • 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数...
    Theo982阅读 395评论 0 0
  • 第一题:两数之和 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的...
    浮萍一叶舟阅读 152评论 0 0
  • 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标的那两个整数,并返回他们的数组下标。你...
    GoSnail阅读 111评论 0 0
  • 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的...
    huxq_coder阅读 193评论 0 1
  • 前言 算法有多重要,不用多说。和之前学习设计模式一样,现在每天开始刷(bei)题(nue),并记录下答题思路和过程...
    soberbad阅读 277评论 0 1