请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

分享一个本题的python解决思路

def containsNearbyAlmostDuplicate(self, nums, k, t):
        if k < 1:
            return False
        dic = collections.OrderedDict()
        for n in nums:
            key = n if not t else n // t
            for m in (dic.get(key - 1), dic.get(key), dic.get(key + 1)):
                if m is not None and abs(n - m) <= t:
                    return True
            if len(dic) == k:
                dic.popitem(False)
            dic[key] = n
        return False

由于python内置的OrderedDict虽然底层实现是二分搜索树,但是不提供floor&ceil操作

而且第三方库bintrees是没法在LeetCode里调用的

所以只能换一种写法了,使用n//t将区间[n-t,n+t]缩减为[n//t-1,n//t+1]

具体思路是,将整个数组分成一个个区间,每个区间的长度是t。这样一来,只要"n所在的区间、n所在的区间的前后两个区间"这三个区间中,有一个数,并且这个数满足abs(n-m)<=t,就找到了一个m。

正在回答 回答被采纳积分+3

2回答

liuyubobobo 2018-02-08 07:41:15

大赞!感谢分享:)

0 回复 有任何疑惑可以回复我~
提问者 ShiveryMoon 2018-02-08 05:04:55

试试能否将自己采纳为答案。。并不行

0 回复 有任何疑惑可以回复我~
  • 哈哈哈:)其实这种分享,如果愿意,也可以写在慕课网的手记中。写完以后,我去给你点赞:)
    回复 有任何疑惑可以回复我~ 2018-02-08 07:42:19
  • 提问者 ShiveryMoon 回复 liuyubobobo #2
    哈哈,好,我也觉得写在这里怪怪的
    回复 有任何疑惑可以回复我~ 2018-02-08 13:30:32
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信