存在重复元素 III(LeetCode)

题目

给你一个整数数组 nums 和两个整数 indexDiffvalueDiff

找出满足下述条件的下标对 (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
相关推荐
xindafu6 分钟前
代码随想录算法训练营第四十五天|动态规划part12
算法·动态规划
freexyn1 小时前
Matlab自学笔记六十一:快速上手解方程
数据结构·笔记·matlab
ysa0510301 小时前
Dijkstra 算法#图论
数据结构·算法·图论
一定要AK1 小时前
2025—暑期训练一
算法
一定要AK1 小时前
贪心专题练习
算法
森焱森2 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
ytttr8733 小时前
matlab通过Q学习算法解决房间路径规划问题
学习·算法·matlab
小张成长计划..3 小时前
数据结构-栈的实现
开发语言·数据结构
go54631584654 小时前
修改Spatial-MLLM项目,使其专注于无人机航拍视频的空间理解
人工智能·算法·机器学习·架构·音视频·无人机
油泼辣子多加4 小时前
【Torch】nn.BatchNorm1d算法详解
算法