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函数,于是我们进入这个函数

leedcode 1_第1张图片

这个函数主要是返回Map中含有所求键值的一个Map,大家有兴趣的话可以去看一看并研究一下,这里便不做多的解释了。(其实这里jdk内部函数的调用中,意识有一个循环遍历的出现,但是其就这么过了....及得当年学计算机系统时,老师便将刀,其实我们用的一些内部函数是采用的遍历,若我们将一个内部函数返回值作为一个常量时,一定要将其定义在循环的外部,但是这题我最后通过的算法确实将其加进了函数内部,所以这还是有待研究的,又懂得的大佬希望能指点一番)

观点:由此可以看出,java中我们对数据的存储结构的使用对问题的求解有着很大的帮助,这题最早我用的时List做的,做到一半的时候我发现,我只能判断他是否含有target-num[i],但是我却求不出target-num[i]的具体位置,所以才采用了Map进行求解。这也算是实践中得出自己的些许领悟吧。

你可能感兴趣的:(leedcode 1)