leetcode_0001 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
[1]. 暴力破解 _________________________________时间复杂度: log(n^2)
使用双重for循环,找到nums[i] 和 nums[j] 和为target 的下标,存入数组,返回数组就ok了。
[2]. 使用 HashMap ________________________时间复杂度: log(n) 空间复杂度:log(n)
但是在c#中没有HashMap ,不过有功能相似的Dictionary 和 HashTable ,这里用Dictionary解决
字典Dictionary<key,value> key 是唯一的,value可以不唯一。可能不同的key,所对应的value是相等的
Dictionary可以通过key来找到相应的value
在c# 中的使用方法:
Dictionary<T,T> dic=new Dictionary<T,T>();
dic[key]==此key对应的value
在这道题中,key值存的是nums数组中的值,value存的是索引下标index
所以利用循环遍历,如果字典中不包含target - nums[i] 的值,就将此nums[i] 加入到字典dic中,遍历下一个nums[i]
如果字典中包含target - nums[i] 的值,那就表示这个数组中存在两个值的和等于target,返回字典中对应key的value
code
下面则是其他人所写的改良版
粘贴过来可以观摩观摩