存在重复元素 III(LeetCode)

题目

给你一个整数数组 nums 和两个整数 indexDiff 和 valueDiff 。

找出满足下述条件的下标对 (i, j):

  • i != j,
  • abs(i - j) <= indexDiff
  • abs(nums[i] - nums[j]) <= valueDiff

如果存在,返回 true; 否则,返回false。

解题

python 复制代码
"""
该算法的时间复杂度为 O(n log min(n, indexDiff)),其中 n 是数组的长度。
SortedList 的插入和删除操作均为 O(log k),k 为当前滑动窗口的大小
"""
from sortedcontainers import SortedList


def containsNearbyAlmostDuplicate(nums, indexDiff, valueDiff):
    # 有序列表,用于维护滑动窗口内的元素
    sorted_list = SortedList()

    for i, num in enumerate(nums):
        # 如果有滑动窗口大小限制,移除不在窗口内的元素
        if i > indexDiff:
            sorted_list.remove(nums[i - indexDiff - 1])

        # 查找范围内是否存在符合条件的元素
        pos1 = sorted_list.bisect_left(num - valueDiff)
        if pos1 < len(sorted_list) and sorted_list[pos1] <= num + valueDiff:
            return True

        # 将当前元素加入有序列表中
        sorted_list.add(num)

    return False


nums = [1, 2, 3, 1]
indexDiff = 3
valueDiff = 0
print(containsNearbyAlmostDuplicate(nums, indexDiff, valueDiff))  # 输出: True
相关推荐
郝学胜-神的一滴28 分钟前
游戏设计:原型与开发 19:U3D工位布置与性格说明书
人工智能·算法·unity·unreal engine·游戏策划·游戏设计
東隅已逝,桑榆非晚31 分钟前
红黑树:从概念到实现
数据结构·c++·笔记·学习
hahaha60161 小时前
数字图像时域滤波或者3D降噪算法FPGA实现
算法·计算机视觉·fpga开发
文丑颜不良啊1 小时前
LeetCode1541~1560题目解析
java·leetcode
YSL0701242 小时前
一文通关-----树和二叉树
数据结构·算法
小糯米6012 小时前
数据结构 数组与链表 内存与缓存
数据结构
青少儿编程课堂2 小时前
蓝桥杯青少组图形化+信息素养+电子学会Scratch考级:校园口算闯关解析
c++·python·算法·bfs·信息学竞赛
computersciencer2 小时前
应用贝叶斯公式:迟到了,那坐的是哪种交通工具呢?
算法·机器学习·概率论
若亦_2 小时前
排序>>交换排序
java·数据结构·算法
努力努力再努力wz2 小时前
【Lua 入门系列】Lua数据结构:从 Table 出发,一文串联数组、链表、栈、队列、集合、映射与树的实现原理
数据结构·链表·lua