第一题 244. Shortest Word Distance II
算法
利用一个HashMap存下对应的word的值和这个word的所有index出现的位置(出现位置用List进行存储)
自己的
自己的在遍历List的时候,时间复杂度是O(n^2)
改进
可以通过index的相互推进,算法效率可以获得更大的提高。但是实际情况,运行速度比上面的还要慢
学到的东西
- 如果初始化一个Map中的List。第一次出现的时候创建new ArrayList, 其他的时候直接添加即可
- 在for 循环中,可以给出多个条件,例如本题中的i 和 j。在最后加的那一步,可以缺失。
第二题 245. Shortest Word Distance III
算法
在本题中,需要考虑新的情况,即当两个words相同时候如何处理,这个时候自己第一题中的两个if 判断就不能再继续使用了。
需要加入判断旗帜flag进行情况判断
自己的算法,快速但是丑陋
|
|
别人的
这个算法容易理解,但是由于在O(n)的循环过程中,每一次都对distance进行了计算,所以效率较低
学到的东西
有个非常重要的点,对于别人的算法的时候。在初始化的时候,如果用int进行定义,那么第一次两个相减的时候,由于定义的是Integer.MAX_VALUE那么相减之后会变成负的最大,所以需要定义为long类型。这点再以后的刷题中一定要注意。
第三题 238. Product of Array Except Self
算法
一个数的乘法和为其左边所有数相乘,然后再乘右边所有数相乘。我们可以用一个Array将其左边的值保存下来,然后同时再保存右边的值。这样就可以做到在不用除法的情况下计算出结果。
学到东西
如果使用除法,注意0这样特殊的点
第四题 167. Two Sum II - Input array is sorted
算法
由于Array是排序的,所以我们用两个pointer进行推进,最后肯定是能找到答案的。在这个算法中,有两个指针,分别指向最左端和最右端。之后根据sum的大小进行调整