Leetcode 220. Contains Duplicate III (Sliding window + set)

2023-10-31

  1. Contains Duplicate III
    Hard
    You are given an integer array nums and two integers indexDiff and valueDiff.

Find a pair of indices (i, j) such that:

i != j,
abs(i - j) <= indexDiff.
abs(nums[i] - nums[j]) <= valueDiff, and
Return true if such pair exists or false otherwise.

Example 1:

Input: nums = [1,2,3,1], indexDiff = 3, valueDiff = 0
Output: true
Explanation: We can choose (i, j) = (0, 3).
We satisfy the three conditions:
i != j --> 0 != 3
abs(i - j) <= indexDiff --> abs(0 - 3) <= 3
abs(nums[i] - nums[j]) <= valueDiff --> abs(1 - 1) <= 0
Example 2:

Input: nums = [1,5,9,1,5,9], indexDiff = 2, valueDiff = 3
Output: false
Explanation: After trying all the possible pairs (i, j), we cannot satisfy the three conditions, so we return false.

Constraints:

2 <= nums.length <= 105
-109 <= nums[i] <= 109
1 <= indexDiff <= nums.length
0 <= valueDiff <= 109

解法1:这题要用到set的lower_bound函数,表示在set里面最小的那个>=输入值的那个元素。

class Solution {
public:
    bool containsNearbyAlmostDuplicate(vector<int>& nums, int indexDiff, int valueDiff) {
        int n = nums.size();
        int left = 0, right = 0;
    //    unordered_map<int, int> mp; //<value, index>  注意用map不对,因为要检测map里面所有的entry,时间复杂度高。
        set<int> s;
        while (right < n) {
            //mp[nums[right]] = right;
            auto iter = s.lower_bound(nums[right]);
            if (iter != s.end()) {
                if (*iter - nums[right] <= valueDiff) return true;
            }
            iter = s.lower_bound(nums[right]);                
            if (iter != s.begin()) {
                iter--;
                if (nums[right] - *iter <= valueDiff) return true;
            }
            
            s.insert(nums[right]);
            right++;
            while (right - left > indexDiff) {
                s.erase(nums[left]);
                left++;
            }
        }
        return false;
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Leetcode 220. Contains Duplicate III (Sliding window + set) 的相关文章

随机推荐

  • 手把手教你外排序

    排序总体来说分为两类 数据在内存中的叫做内排序 数据存在磁盘的叫外排序 一般而言 磁盘中存放的都是大型数据 所以 外排序主要是应用于磁盘中大型数据的 一 排序思想 对于外排序而言 因为待排的数据往往远大于内存容量 所以在排序时通常将数据切分
  • 如何在React Native中制作实时SoundCloud波形

    by Pritish Vaidya 通过Pritish Vaidya 如何在React Native中制作实时SoundCloud波形 How to make realtime SoundCloud Waveforms in React N
  • 13个应用案例,讲述最真实的大数据故事!

    大数据目前是当下最火热的词了 你要是不知道大数据这个概念 都不好意思在众人面前开口了 然而实际上很多人都对大数据的应用模糊不清 现在就让我们从下面十三个鲜明的大数据应用案例来了解下最真实的大数据故事 大数据改变的那些行业 大数据目前是当下最
  • DOM0,DOM2,DOM3事件处理方式区别

    引子 文档对象模型是一种与编程语言及平台无关的API Application programming Interface 借助于它 程序能够动态地访问和修改文档内容 结构或显示样式 W3C协会早在1988年就开始了DOM标准的制定 W3C
  • 微信小程序音频录制时bindtouchend不触发 音频录制代码

    问题描述 微信小程序项目 长按录制音频 手松开录制结束 长按时确实可以出发bindtouchstart 但是手松开之后不触发bindtouchend 从网上看很多说把bindtouchend换成bindtouchcancel 但是我这边依然
  • 如何给页面元素添加水印背景,在vue中怎么处理?

    您的三连支持是我创作的动力 这里写一个简单的给页面元素添加水印背景的方法 主要是添加文字行的 步骤1 在canvas中画出这个水印 这里我写的注释很详细了 不会的可以看看canvas的相关api 给一个页面元素添加水印背景 param te
  • Micropython ESP32 tcpserver 把玩【一】

    文章目录 测试TCP通信 解决供电问题 Hello World 传输文本文件 ESP32新建txt文件 ESP32运行的TCP SERVER程序 电脑上运行的TCP CLIENT程序 测试TCP通信 测试代码源自uPyCraft V1 1内
  • 【开启报名】大模型研讨会

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入 以下内容来源于THU基础模型 基础模型研究中心 自 2018 年 BERT GPT 等语言模型问世以来 大规模语言模型取得了显著进步 对社会经济发展产生了深远影响 尽管如此 该领
  • jQuery与Ajax 面试题库(长期更新中...)

    jQuery 部分 JavaScript 是客户端脚本的标准语言 而 jQuery 使得编写 JavaScript 更加简单 你可以只用写几行的jQuery 代码就能实现更多的东西 它是最长被用到的 JavaScript 库之一 并且现在已
  • Puppeteer开发过程中遇到的问题及解决方案

    最新出了一个BUG 最新版的安装之后在MacOS M1芯片无法打开新窗口 工欲善其事必先利其器 请先检查本机是否安装NodeJS环境以及查阅API Google官方文档 https developers google com web too
  • Linux svn 命令每次都要输入密码o(╯□╰)o

    环境 Ubuntu 20 04 服务器ssh远程登录 所以运行不了钱包之类的图形工具管理密码 subversion 1 13 验证可行的步骤 1 删除原来的配置 rm subversion rf 2 执行一次svn命令输入密码后 会在目录
  • 为什么int类型可以直接赋值给char类型?

    1 为什么int类型变量不能直接赋值给char类型变量 char a 97 gt a 为char类型变量 a 赋值常量值 97 char b a 3 gt d 97 3 100 ASCII对应的字符为 d char c a 3 gt 报错
  • 入门:使用MySQL Workbench新增MySQL数据库并授权给新用户

    一 新增用户 打开MySQL Workbench可视化工具 点击左侧菜单的 Users and Privileges 链接 再点击右侧界面下方的 Add Account 按钮 输入新用户名 user kagome 主机连接地址 表示从任何地
  • 使用webpack打包的单页面项目如何设置favicon.icon文件

    上一篇文章 如何给网站设置favicon ico图标 介绍了favicon ico是什么 怎么配置 有哪几种方式 但发现webpack打包的单页面项目却与普通项目不同 所以这篇文章介绍一下使用webpack打包的单页面项目如何设置favic
  • 详解nginx服务器绑定域名和设置根目录的方法

    主要介绍了详解nginx服务器绑定域名和设置根目录的方法 nginx服务器绑定域名以及设置根目录非常方便 小 编觉得挺不错的 现在分享给大家 也给大家做个参考 一起跟随小编过来看看吧 nginx服务器绑定域名以及设置根目录非常方便 首先进入
  • COSCon'20 开源硬件论坛&深圳开源聚会

    COSCon开源硬件论坛 发轫于2018 软硬同台 共享大开源 共生于2019 多元携手 共筑源生态 开源硬件生态的可持续 更需要产业落地前行 今年 在制造业行业固有困难凸显和全球贸易多方遭受冲击的影响下 开源硬件论坛将同大家一起聚焦探索开
  • K-Means聚类算法

    K Means聚类算法 k means算法又名k均值算法 K means算法中的k表示的是聚类的k个簇 means代表取每一个聚类中数据值的均值作为该簇的中心 或者称为质心 即用每一个聚类的质心对该簇进行描述 其算法思想大致为 先从样本集中
  • 用scala 写spark程序

    scala sdk下载地址 https downloads lightbend com scala 2 12 0 scala 2 12 0 zip scala eclipse 下载地址 http downloads typesafe com
  • window下最新版的EMQX4.4.3服务器的搭建和用户名密码的设置

    一 下载EMQX软件包 下载 EMQX 开源版 EMQX 二 解压 我放到D盘下 测试必须是根目录 三 通过命令窗口进入bin目录 输入 emqx start 四 打开浏览器输入 127 0 0 1 18083 五 打开mqttfx 设置客
  • Leetcode 220. Contains Duplicate III (Sliding window + set)

    Contains Duplicate III Hard You are given an integer array nums and two integers indexDiff and valueDiff Find a pair of