220. Contains Duplicate III
problem description
Given an array of integers, find out whether there are two distinct indices i and j in the array such that the absolute difference between nums[i] and nums[j] is at most t and the absolute difference between i and j is at most k.
Example 1:
Example 2:
Example 3:
algorithm thought
这是这个系列的第三题,第二题加入了k表示只看前面k个数。第三题加入了t,代表数字的范围可以再t以内波动。
最开始,我想的是,还是和前一题一样处理,只不过判断是是否存在的时候,使用一个for循环判断这个范围内的值。但是这个题目的测试样例很bug,有个测试样例是INT_MAX,直接超时。
看了discuss,发现有人用桶的方法解这题,我感觉很巧妙。和之前桶排序一样。首先定下桶的大小,这里设为t+1。从INT_MIN开始,每个桶只能放一个数。如果出现相同的桶,那么就可以直接返回true,因为同一个桶中,最大的差值就是t。然后还需要在这个桶的前一个和后一个桶中找数,判断差值是否小于t。如果存在,返回true。通过这种办法,将数字换成桶,再重复利用上题的算法,这里时间复杂度可以到O(n)
code
algorithm analysis
这里遍历一次数组得到结果,时间复杂度O(n)
Last updated