当前位置:首页 » 《随便一记》 » 正文

1.两数之和

7 人参与  2022年12月17日 15:53  分类 : 《随便一记》  评论

点击全文阅读


传送门:https://leetcode.cn/problems/two-sum/

目录

题目描述 

题解 


题目描述 

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0,1] 。


示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]


示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]


 

题解 

哈希遍历

以输入nums=[2,7,11,15],target=9为例,本题要求返回数组中和为目标值的元素下标。故在创建的哈希表中以数组元素(nums[i])为key,以其下标(i)作为value

遍历输入用例nums=[2,7,11,15],并在哈希表中寻找是否含有key=target-nums[i]。若有则返回现在的数组下标i和key=target-nums[i]对应的value

上述方法先建表再遍历,需要两次循环且需考虑重复元素;如输入nums=[3,3],target=6,故不仅需要判断哈希表中是否含有key=target-nums[i],还需通过比较重复元素的下标来确保查到的元素不能为本身(hash[target-nums[i]]!=i)

下文中代码属于边建表边遍历,仅需一次循环且无需考虑重复元素。该方法的特点是每次向哈希表中添加一个元素时,均会判断哈希表中是否含有key=target-nums[i]且作用表中不含有key=target-nums[i]时,该元素才会被放入。这意味着当放入两个重复的元素时,前者因不满足条件而被放入哈希表,而后者因满足条件未被放入表中,即得出结果时表中没有两个重复的元素;故无需比较重复元素的下标来确认是重复元素中的哪一个

C++ 

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

C#

public class Solution {    public int[] TwoSum(int[] nums, int target) {        Dictionary<int,int> hash=new Dictionary<int,int>();        for(int i=0;i<nums.Length;i++){            if(hash.ContainsKey(target-nums[i])){                return new int[]{hash[target-nums[i]],i};            }            hash[nums[i]]=i;        }        return new int[]{};    }}

点击全文阅读


本文链接:http://zhangshiyu.com/post/49941.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1