day_8——LeetCode1:两数之和

Day_8 —— LeetCode练习题:两数之和

1. 两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

  1. 首先,我们先遍历数组nums,i为当前元素下标,我们需要将每一个遍历的值放入map中做为key,元素下标作为value;
  2. 同时,对每一个元素都判断map中是否存在target-nums[i]的key值。这里的话,9-7=2,2在map中已存在;
  3. 所以2和7所在的key值对应的value,也[0,1],就是我们要的两个数组下标。

C++实现:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) 
    {
        //建立一对一的hash
        map<int,int> a_map;
        //用来存储找到的结果下标,初始化一个大小为2,值为0的容器b
        vector<int> b(2,0);
        int size=nums.size();
        for(int i=0;i<size;++i)
        {
            if(a_map.count(target-nums[i])>0)
            {
                b[0]=a_map[target-nums[i]];
                b[1]=i;
                break;
            }
            a_map[nums[i]]=i;//反过来放入map中,用来获取结果下标
        }
        return b;
    };
};

python实现:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        length = len(nums)
        dict_nums = {nums[i]:i for i in range(length)}
        for i in range(length):
            a = nums[i] # key值
            b = target - a 
            if b in dict_nums and i != dict_nums[b]:
                return [i, dict_nums[b]]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章