。。。水题,本来想sorting的,一想要nlogn还是用一点空间来做吧。
Contains Duplicates II:
这题完全没见过,不过不难。比较难的是想到最优解。我要是用Set的话我不会想到去永远maintain a sliding window of size k. 我应该会用一个HashTable来做,记录index。
Contains Duplicate III 这题:【难】
这题包含了 bucket sort和 sliding windows 双重Idea。
The ceiling(E e)method is used to return the least element in this set greater than or equal to the given element, or null if there is no such element
人生第一次接触Treeset...原来这么牛逼。。
理解Treeset: Treeset可以认为是一个BST data structure, 里面的东西可以认为是排好序的。并且他查找速度超级快。【没hashmap快】。但是他有一个很牛逼的功能,就是找到下一个比你大或者比你小的数。
注意TreeSet return回来的是wrap class。
所以为什么用bucket sort? 因为题目有两个要求。1. number之间间隔为多少。 2. index range.
第一个条件想到bucket, 第二个条件想到sliding window。
corner case: t==0的时候怎么办 不能除0. 所以我们提前把这个interval 变量加1. 这样起码divide不会是0.
然后还有一个情况是nums[i] 为负数的情况。 要把它放到合适的bucket ID里。
-3/5=0. 不过我们需要-3/5 去到bucket id =1. 所以我们最后可以减一个1.
看完答案第一遍做的时候脑子里一直想的是同一个bucket可以放几个东西啊。用map不会覆盖吗?
但是其实一个bucket放一个东西就够了,因为如果有第二个东西进入这个bucket,表示他们的相差值在bucket设定的范围内,就表示找到了。
也可能每个bucket都有一个东西,这个时候要看看隔壁的桶里的东西跟我们比一下 abs值。
桶的概念还不是很熟悉:我们为什么要桶? 要让每个桶内之间元素的相差值在bucket范围内。