1 两数之和

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

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

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

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

属于数组和哈希表知识点

Python版本

def two_sum(nums,target):
  dic = {}
  for i,u in enumerate(nums):
    if (target-n) in dic:
      return (dic[target-n],i)
  dic[n] = i

首先声明了一个字典

对整个数组进行遍历操作,拿出每个元素的值和索引

如果值在字典中的话
就返回该值的索引和字典中的对应的索引

如果没有,把该值存入字典,并继续进行循环

把存入字典的动作放在最后写因为,当nums中的元素有相同的值的时候,不会发生取到的是两个同样的索引值

比如5 5 10 10 target = 10

比如开始存入的时候dic[0] = 5

10 - 5 =5 in dic

return [0,0]

所以这个逻辑是不对的

C++ 版本

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map<int,int> hash;
        vector<int> result;
        
        int numsSize = nums.size();
        
        for (int i = 0;i < numsSize;i ++){
            int findToNums = target - nums[i];
            if (hash.find(findToNums) != hash.end()){
                result.push_back(hash[findToNums]);
                result.push_back(i);
                return result;
            }
            
            hash[nums[i]] = i;
        }
        return result;

push_back() 在Vector最后添加一个元素(参数为要插入的值)

用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器

所以当find和end是不一样的时候证明找到了该元素

以上是暴力法
现在用一个hash法进行求解

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        undered_map <int,int> m;
        for (int i = 0;i < nums.size();i++){
          int res = target - nums[i];
          if(m.find(res) != m.end()){
            return {m[target-nums[i]],i};
      }
      m[nums[i]] = i;
    }
    return {};
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目: 题目地址:https://leetcode-cn.com/problems/two-sum/ 问题描述: ...
    MrGeekr极氪阅读 3,805评论 0 0
  • 题目 分析 这道题目给我们一个数组,数组里面全是整数,然后再给我们一个数字 target,需要我们求出在这个数组中...
    zzpwestlife阅读 2,823评论 1 2
  • 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并...
    玩大神的简书阅读 2,361评论 0 0
  • (一)两数之和 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同...
    Ivan_Lan阅读 2,662评论 0 0
  • 题目: 给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回...
    12313凯皇阅读 3,462评论 0 0

友情链接更多精彩内容