【桶】220.存在重复元素 III 【LeetCode】

220.存在重复元素 III 【LeetCode】

给你一个整数数组 nums 和两个整数 kt。请你判断是否存在 两个不同下标ij,使得 abs(nums[i] - nums[j]) <= t,同时又满足 abs(i - j) <= k

如果存在则返回 true,不存在返回 false

示例 1
输入:nums = [1,2,3,1], k = 3, t = 0
输出:true

示例 2
输入:nums = [1,0,1,1], k = 1, t = 2
输出:true

示例 3
输入:nums = [1,5,9,1,5,9], k = 2, t = 3
输出:false

提示
0<=nums.length<=2∗1040 <= nums.length <= 2 * 10^40<=nums.length<=2104
−231<=nums[i]<=231−1-2^{31} <= nums[i] <= 2^{31} - 1231<=nums[i]<=2311
0<=k<=1040 <= k <= 10^40<=k<=104
0<=t<=231−10 <= t <= 2^{31} - 10<=t<=2311

思路:由于对于一个数 xxx,只要找到存在[x−t,x+t][x-t,x+t][xt,x+t]内的数就算成功,于是采用桶的思想,桶的大小设为 t+1t+1t+1,此时桶内的极差为 ttt,即桶内的任意的两个数的差都符合条件,因此若某个桶同时出现两个及以上的元素即说明 truetruetrue,而对于数 xxx 既可向前找 ttt 个数,也可向后找 ttt 个数,因此还需观察相邻桶中的元素,相邻桶若存在与该数的差值不大于 ttttruetruetrue,而由于某桶中出现两个元素就直接成功了,因此相邻桶要么没有元素,要么只有一个元素(因此采用哈希表实现桶),因此只需比对常数级次数。而对于限制条件 kkk,只需模拟大小 k+1k+1k+1 的滑动窗口,从左到右遍历数组,每次从右端加入新的数并且删除最左端的数

官方题解

class Solution {
public:int getID(int x, long w) {return x < 0 ? (x + 1ll) / w - 1 : x / w;}bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {unordered_map<int, int> mp;int n = nums.size();for (int i = 0; i < n; i++) {long x = nums[i];int id = getID(x, t + 1ll);if (mp.count(id)) {return true;}if (mp.count(id - 1) && abs(x - mp[id - 1]) <= t) {return true;}if (mp.count(id + 1) && abs(x - mp[id + 1]) <= t) {return true;}mp[id] = x;if (i >= k) {mp.erase(getID(nums[i - k], t + 1ll));}}return false;}
};作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/contains-duplicate-iii/solution/cun-zai-zhong-fu-yuan-su-iii-by-leetcode-bbkt/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

代码解释

哈希映射函数

int getID(int x, long w) {return x < 0 ? (x + 1ll) / w - 1 : x / w;
}

在这里插入图片描述
正数部分很好理解,主要讨论负数部分

  1. 首先将负数都加1,由图可以看到加1后负数的坐标恰好与右边正数形成镜像映射,于是对称的两边的 ididid 互为相反数
  2. 为解决 +0+0+0−0-00ididid 冲突,于是将负数桶的 ididid 均减1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

远控免杀专题12--Green-Hat-Suite免杀

0x01 免杀能力一览表 几点说明&#xff1a; 1、上表中标识 √ 说明相应杀毒软件未检测出病毒&#xff0c;也就是代表了Bypass。 2、为了更好的对比效果&#xff0c;大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。 3、由于本机测试时只是安装了360全…

远控免杀专题 13----zirikatu免杀

0x01 免杀能力一览表 几点说明&#xff1a; 1、上表中标识 √ 说明相应杀毒软件未检测出病毒&#xff0c;也就是代表了Bypass。 2、为了更好的对比效果&#xff0c;大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。 3、由于本机测试时只是安装了360全…

UML 的九种模型图

1. UML的模型图 UML 的模型图能够将被建模的系统的某一个方面的某一部分以图形的方式表示出来&#xff0c;不同的视图通过将多个不同的模型图有机组合在一起就能够描述系统模型的某方面的特征。UML的模型图是有模型元素构成的&#xff0c;模型元素以图标的形式直观形象的表达…

【莫队】区间众数(Codeforces Round #716 (Div. 2) D)

D. Cut and Stick &#xff08;赛后补题&#xff09;借本题学习莫队算法以及区间众数的求法 题意&#xff1a;对于整型数组&#xff0c;每次询问[L,R][L,R][L,R]区间问最少分为多少个子序列&#xff0c;使得每个子序列的众数xxx的个数cntxcnt_xcntx​不大于 ⌈len2⌉\left \l…

如何正确使用SqlConnection

以前曾见过有人这样写代码&#xff1a; public class Service1 : IService1{private SqlConnection conn new SqlConnection();public void Method1(){//do something with conn;}public void Method2(){//do something with conn;}public void Method3(){//do something with…

远控免杀专题 14 ---AVIator

0x01 免杀能力一览表 几点说明&#xff1a; 1、上表中标识 √ 说明相应杀毒软件未检测出病毒&#xff0c;也就是代表了Bypass。 2、为了更好的对比效果&#xff0c;大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。 3、由于本机测试时只是安装了360全…

【Web开发】级联查询(Ajax/ jQuery/ Servlet)

实现级联查询 共有两个下拉框&#xff0c;第一级为学院&#xff0c;第二级为学院开设的科目。 实现的功能为&#xff1a;当改变学院的选择&#xff0c;第二级下拉框需变为对应学院开设的科目内容。 结果预览&#xff1a; jsp页面 <% page contentType"text/html;…

远控免杀专题(15)-DKMC免杀

0x01 免杀能力一览表 几点说明&#xff1a; 1、上表中标识 √ 说明相应杀毒软件未检测出病毒&#xff0c;也就是代表了Bypass。 2、为了更好的对比效果&#xff0c;大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。 3、由于本机测试时只是安装了360全…

SQL——以面向集合的思维方式来思考

本文来自&#xff1a;http://www.ituring.com.cn/article/details/472 为了以有趣的方式更好地帮助你形成面向集合的思维方式&#xff0c;我将给出自己最喜欢的游戏之一——集合。你可以在线玩这个游戏&#xff0c;网址是www.setgame.com/puzzle/set.htm&#xff0c;每天都会贴…

远控免杀专题(16)-Unicorn免杀

0x01 免杀能力一览表 几点说明&#xff1a; 1、上表中标识 √ 说明相应杀毒软件未检测出病毒&#xff0c;也就是代表了Bypass。 2、为了更好的对比效果&#xff0c;大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。 3、由于本机测试时只是安装了360全…

【汇编语言】乘法(MUL/IMUL)

乘法&#xff08;MUL/IMUL&#xff09; 目录乘法&#xff08;MUL/IMUL&#xff09;IMUL(signed multiply)有符号数乘法MUL(unsigned multiply)无符号数乘法麻&#xff01;属实是被这个有符号乘法给整麻了&#xff0c;教材就一行例子直接不解释了&#xff0c;关于标志位溢出的一…

eclipse快捷键

Java开发工具(Eclipse的视窗和视图概述) A:视窗 每一个基本的窗体被称为视窗 PackageExplorer 显示项目结构&#xff0c;包&#xff0c;类&#xff0c;及资源Outline 显示类的结构&#xff0c;方便查找&#xff0c;识别&#xff0c;修改Console 程序运行的结果在该窗口显示Hie…

【汇编语言】除法(DIV/IDIV)

除法&#xff08;DIV/IDIV&#xff09; 目录除法&#xff08;DIV/IDIV&#xff09;DIV(unsigned divide)无符号数除法IDIV(signed divide)有符号数除法DIV(unsigned divide)无符号数除法 格式&#xff1a;DIV SRC 操作&#xff1a; SRCSRCSRC为字节时&#xff0c;(AL)←(AX)/…

远控免杀专题(17)-Python-Rootkit免杀

免杀能力一览表 几点说明&#xff1a; 1、上表中标识 √ 说明相应杀毒软件未检测出病毒&#xff0c;也就是代表了Bypass。 2、为了更好的对比效果&#xff0c;大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。 3、由于本机测试时只是安装了360全家桶…

斜视角的讨论(转)

http://school.ogdev.net/listshow.asp?page4&typeid0&categoryid5&id0&ListType2 目 录 1.1 地图和地表 1.2 斜视角游戏中的视角 1.3 Tile图片的拼接 1.4 不同地表间的过渡 1.5 地图数据结构的定义 --------------------------------------------------…

计算机网络(湖科大教书匠)

计算机网络&#xff08;湖科大教书匠&#xff09; 本文档为教学视频【计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;_哔哩哔哩_bilibili】的摘录 目录计算机网络&#xff08;湖科大教书匠&#xff09;一、绪论1.2 因特网概述1.2.1 网络、互连网&#xff08;互联…

远控免杀专题(18)-ASWCrypter免杀

免杀能力一览表 几点说明&#xff1a; 1、上表中标识 √ 说明相应杀毒软件未检测出病毒&#xff0c;也就是代表了Bypass。 2、为了更好的对比效果&#xff0c;大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。 3、由于本机测试时只是安装了360全家桶…

Direct3D中的绘制(3)

立方体——只比三角形稍微复杂一点&#xff0c;这个程序渲染一个线框立方体。 这个简单的绘制和渲染立方体的程序的运行结果如下图所示&#xff1a; 源程序&#xff1a; /************************************************************************************** Renders a …

远控免杀专题(19)-nps_payload免杀

免杀能力一览表 几点说明&#xff1a; 1、上表中标识 √ 说明相应杀毒软件未检测出病毒&#xff0c;也就是代表了Bypass。 2、为了更好的对比效果&#xff0c;大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。 3、由于本机测试时只是安装了360全家桶…

操作系统中的多级队列调度

多级队列调度 (Multilevel queue scheduling) Every algorithm supports a different class of process but in a generalized system, some process wants to be scheduled using a priority algorithm. While some process wants to remain in the system (interactive proce…