栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

值和小标之差都在给定范围内之滑动窗口+HashMap+桶排

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

值和小标之差都在给定范围内之滑动窗口+HashMap+桶排

桶排+滑动窗口+hashMap

前言一、案例二、题解总结参考文献

前言

维持一个滑动窗口的值对应的特性存储于map之中,从而避免每次重复计算导致复杂度变高。

一、案例

二、题解

维持一个滑动窗口,这个窗口大小为k,记录窗口内的值分别属于哪一类,就不用每次重复去计算,再通过HashMap快速找到左中右桶来寻找是否有满足条件的值对。

//桶排
    public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
        int len = nums.length;
        Map cache = new HashMap<>();
        long base = (long) t + 1;
        for (int i = 0; i < len; i++) {
            long id = getId(nums[i], base);
            if (cache.containsKey(id)) return true;
            if (cache.containsKey(id - 1) && nums[i] - cache.get(id - 1) <= t) return true;
            if (cache.containsKey(id + 1) && cache.get(id + 1) - nums[i] <= t) return true;
            cache.put(id, (long) nums[i]);
            if (i - k >= 0) cache.remove(getId(nums[i - k], base));
        }
        return false;
    }

    private long getId(int num, long base) {
        if (num >= 0) return num / base;
        long m = num / base, n = num % base;
        return n == 0 ? m : m - 1;
    }
总结

1)需要去接受新知识,第一次见桶排,虽然很痛苦,但是还是理清逻辑,还完成了自己的改写代码,这种新输入的思想真的很nice。

参考文献

[1] LeetCode 原题[
[2] LeetCode 官方题解 非常详细

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/754189.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号