leedcode 1
这道题是对集合类中map的有效使用
leecodeNO.1
1.
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
这题最简单的方式也就是暴力拆除了,但是时间复杂度是O(n^2)。所以我采用的是Map类,键值为数组中的每一个元素,映射为其坐标。
最后把这两个坐标加进加进返回值数组中就可以了。
不过因为最近在研究JDK 所以好信的看了一眼JDK 的containsKey的源码 实在HapMap类中实现的大家可以去看看
在这个函数中调用的时getNode函数,于是我们进入这个函数
这个函数主要是返回Map中含有所求键值的一个Map,大家有兴趣的话可以去看一看并研究一下,这里便不做多的解释了。(其实这里jdk内部函数的调用中,意识有一个循环遍历的出现,但是其就这么过了....及得当年学计算机系统时,老师便将刀,其实我们用的一些内部函数是采用的遍历,若我们将一个内部函数返回值作为一个常量时,一定要将其定义在循环的外部,但是这题我最后通过的算法确实将其加进了函数内部,所以这还是有待研究的,又懂得的大佬希望能指点一番)
观点:由此可以看出,java中我们对数据的存储结构的使用对问题的求解有着很大的帮助,这题最早我用的时List做的,做到一半的时候我发现,我只能判断他是否含有target-num[i],但是我却求不出target-num[i]的具体位置,所以才采用了Map进行求解。这也算是实践中得出自己的些许领悟吧。