zoukankan      html  css  js  c++  java
  • Leetcode练习(Python):排序类:第220题:存在重复元素 III:给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ。

    题目:

    存在重复元素 III:给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ。

    思路:

    常规的查找方法一直超时,意识到不能那样做,看来讲解,使用桶排序,桶排序也是第一次用到。

    一下是大神的思路,这里作为学习:

    1. 桶的容量初始化为t+1,则处于同一个桶内的元素差必然不大于t;
    2. 两个元素之间的关系有三种情况:
      • 在同一个桶内,则元素差必然不大于t,可直接返回True;
      • 在相邻桶内,此时元素之差可能不大于t,需要进一步判断再返回;
      • 其他情况,元素差必然大于t,不用考虑了。
    3. 若未在桶内找到符合条件的元素(上面的第三种情况),则将当前元素加入相应桶内;
    4. 若元素索引超过了k,则可以把桶中与当前元素索引差超过k的记录删除,因为在其中找到的元素不可能满足索引差不超过k这个条件了。

    程序:

    class Solution:
        def containsNearbyAlmostDuplicate(self, nums: List[int], k: int, t: int) -> bool:
            if not nums:
                return False
            if t < 0:
                return False
            bucket = {}
            volumn = t + 1
            for index, value in enumerate(nums):
                bucket_index = value // volumn
                if bucket_index in bucket:
                    return True
                if bucket_index - 1 in bucket and abs(value - bucket[bucket_index - 1]) < volumn:
                    return True
                if bucket_index + 1 in bucket and abs(value - bucket[bucket_index + 1]) < volumn:
                    return True
                bucket[bucket_index] = value
                if index >= k:
                    del bucket[nums[index - k] // volumn]
            return False
    

      

  • 相关阅读:
    6 全局锁和表锁
    oracle ogg--ogg搭建过程中遇到的错误及处理
    5 深入浅出索引(下)
    4 深入浅出索引(上)
    oracle ogg 单实例双向-新增表,修改表结构(oracle-oracle
    oracle ogg 单实例双向复制搭建(oracle-oracle)--Oracle GoldenGate
    Iview 中 获取 Menu 导航菜单 选中的值
    idea中git分支的使用
    vue使用axios进行ajax请求
    web前端_Vue框架_设置浏览器上方的标题和图标
  • 原文地址:https://www.cnblogs.com/zhuozige/p/12909242.html
Copyright © 2011-2022 走看看