代码仓库:Github | Leetcode solutions @doubleZ0108 from Peking University.
-
解法1(超时): 双重循环,第二重循环考虑下标左右两边k的长度
-
解法2(T54% S8%): 桶排序(计数排序),首先将原数组按照值进行排序并保存下标,然后外层一次遍历,内层从当前遍历向前试探,如果找到 下标≤k & 满足值≤t 则返回True,如果这两个条件都没满足则代表后面的也不可能满足了,break再往前遍历一个新位置
# way1 army = sorted(enumerate(nums), key=lambda x: x[1]) # way2 army = zip(range(len(nums)), nums) army.sort(key=lambda x: x[1])
class Solution(object):
def containsNearbyAlmostDuplicate(self, nums, k, t):
"""
:type nums: List[int]
:type k: int
:type t: int
:rtype: bool
"""
if not len(nums): return False
army = sorted(enumerate(nums), key=lambda x: x[1])
for i in range(1, len(nums)):
j = i
while j<len(nums):
if abs(army[i-1][0]-army[j][0])<=k and abs(army[i-1][1]-army[j][1])<=t: return True
elif abs(army[i-1][0]-army[j][0])>k and abs(army[i-1][1]-army[j][1])>t: break
j += 1
return False
这篇博客探讨了一种在Python中解决LeetCode问题的高效方法,通过实现桶排序(计数排序)算法来优化解决方案。文章介绍了两种实现方式,分别是基于enumerate排序和基于zip排序,并详细解释了如何在算法中应用这些排序技巧来查找近乎重复的元素。作者展示了如何在限定的k距离内找到数值差不超过t的元素,从而提高算法的时间效率。
115

被折叠的 条评论
为什么被折叠?



