C++桶排序算法的应用:存在重复元素 III

news2025/7/19 8:32:24

题目

给你一个整数数组 nums 和两个整数 indexDiff 和 valueDiff 。
找出满足下述条件的下标对 (i, j):
i != j,
abs(i - j) <= indexDiff
abs(nums[i] - nums[j]) <= valueDiff
如果存在,返回 true ;否则,返回 false 。

示例 1:
输入:nums = [1,2,3,1], indexDiff = 3, valueDiff = 0
输出:true
解释:可以找出 (i, j) = (0, 3) 。
满足下述 3 个条件:
i != j --> 0 != 3
abs(i - j) <= indexDiff --> abs(0 - 3) <= 3
abs(nums[i] - nums[j]) <= valueDiff --> abs(1 - 1) <= 0
示例 2:
输入:nums = [1,5,9,1,5,9], indexDiff = 2, valueDiff = 3
输出:false
解释:尝试所有可能的下标对 (i, j) ,均无法满足这 3 个条件,因此返回 false 。
提示:
2 <= nums.length <= 105
-109 <= nums[i] <= 109
1 <= indexDiff <= nums.length
0 <= valueDiff <= 109

滑动窗口+有序集合

代码

class Solution {
public:
bool containsNearbyAlmostDuplicate(vector& nums, int indexDiff, int valueDiff) {
std::multiset setHas;
for (int i = 0; i < nums.size(); i++)
{
const int iDelIndex = i - indexDiff - 1;
if (iDelIndex >= 0)
{
auto it = setHas.find(nums[iDelIndex]);
setHas.erase(it);
}
auto it1 = setHas.lower_bound(nums[i] - valueDiff);
auto it2 = setHas.upper_bound(nums[i] + valueDiff);
if (it1 != it2)
{
return true;
}
setHas.emplace(nums[i]);
}
return false;
}
};

分析

如果(i,j)符合,则(j,i)也符合。所以可以只考虑i<j,不考虑i>j。题意明确表示i!=j。所以只需要考虑i<j。用有序集合表示滑动窗口nums[max(0,j-k),j]。其实用set就可以了,multiset可以少一个判断:如果存在重复值直接返回true。

桶排序

用桶来表示滑动窗口。设置桶的大小为valueDiff+1,如果2个数在同一个桶中说明符合。如果符合直接返回,所以一个桶不会存在两个像素。可以用哈希映射来表示桶。如果不在一个桶,还要比较是否和前一个桶或后一桶符合条件。

代码

class Solution {
public:
bool containsNearbyAlmostDuplicate(vector& nums, int k, int t) {
unordered_map<int, int> mp;
int n = nums.size();
for (int i = 0; i < n; i++)
{
const int curValue = nums[i];
int inx = GetBucketIndex(curValue, t + 1);
if (mp.count(inx))
{
return true;
}
if (mp.count(inx - 1) && (abs(curValue - mp[inx - 1]) <= t))
{
return true;
}
if (mp.count(inx + 1) && (abs(curValue - mp[inx + 1]) <= t))
{
return true;
}
mp[inx] = curValue;
if (i>= k)
{
const int iEraseIndex = GetBucketIndex(nums[i - k ],t+1);
mp.erase(iEraseIndex);
}
}
return false;
}
int GetBucketIndex(int value, int iBuckCap)
{
return value >= 0 ? (value / iBuckCap) : ((value + 1) / iBuckCap - 1);
}
};

其它

视频课程

要是你认为本篇难道较大,不好入手,推荐你先学习基础算法的课程,我已完成部分,余下部分持续更新中,就在CSDN学院。
https://edu.csdn.net/course/detail/38771

C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 **C+

+17**

相关下载

如果你想观其大略,建设下载《闻缺陷则喜算法册》doc版
https://download.csdn.net/download/he_zhidan/88348653

博主想队大家说的话
墨家名称的来源:有所得以墨记之。
闻缺陷则喜的来由:早发现,早修改问题,成本更低
程序是龙,算法是睛

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

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

相关文章

在不安全的集群上启用 Elasticsearch Xpack 安全性

本博文详细描述如何把一个没有启动安全的 Elasticsearch 集群升级为一个带有 HTTPS 访问的启用 Elasticsearch xpack 安全的集群。 为了增强 Elasticsearch 集群的安全性&#xff0c;你需要执行完全集群重启&#xff0c;并在客户端进行一些更改。 启用身份验证后&#xff0c;所…

分析谐波失真

目录 简介 查看非线性的影响 量化非线性失真 降低谐波失真的输入衰减 SNR THD 和 SINAD 当作输入衰减的函数 用于消除失真的后处理 组合方法 总结 此示例说明如何分析在具有噪声的情况下弱非线性系统的谐波失真。 简介 在此示例中&#xff0c;我们将研究放大器的简化模…

推荐动漫《头文字D》

《头文字D》是漫画家重野秀一作画的青年漫画&#xff0c;从1995年开始在《周刊Young Magazine》上连载&#xff0c;于2013年7月29日完结&#xff0c;电子版由漫番漫画连载 [1] 。已被改编成同名动画和电影&#xff0c;还有多本探讨汽车驾驶技巧的周边专书。头文字D漫画刚出版即…

机器学习: 初探 定义与应用场景

机器学习 第一课 初探 定义与应用场景 机器学习 第一课 初探 定义与应用场景机器学习的历史机器学习为什么重要?机器学习的定义机器学习在日常生活中的应用推荐系统语音识别图像识别 商业领域的机器学习金融风险评估股票市场预测客户关系管理 机器学习在医疗领域的应用疾病预测…

9、Docker 安装 Redis

1、下载镜像 docker pull redis:3.2.10 2、本机创建redis目录并修改配置文件 1&#xff09;创建目录 mkdir /usr/local/redis 2&#xff09;进入redis目录 cd /usr/local/redis 3&#xff09;创建data目录 mkdir data 4&#xff09;创建redis.conf文件 vi redis.conf 5&a…

人工智能轨道交通行业周刊-第63期(2023.10.9-10.15)

本期关键词&#xff1a;一体化智慧列车运行系统、车辆数字化运维管理、智能传感器、PHM、LKJ 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro…

数据结构之手撕顺序表(增删查改等)

0.引言 在本章之后&#xff0c;就要求大家对于指针、结构体、动态开辟等相关的知识要熟练的掌握&#xff0c;如果有小伙伴对上面相关的知识还不是很清晰&#xff0c;要先弄明白再过来接着学习哦&#xff01; 那进入正题&#xff0c;在讲解顺序表之前&#xff0c;我们先来介绍…

【HCIP】HCIA复习

目录 大纲 情景代入 访问百度/谷歌服务器的准备工作 1、计算机网络发展第一阶段人机交互的加工过程 2、OSI参考模型 3、TCP/IP参考模型 访问谷歌&#xff08;百度&#xff09;服务器的流程 1、主机需要一个IP地址才能上网&#xff08;本场景中通过DHCP服务获取IP地址&a…

【面试题解析】搜狐畅游:Redis IO多路复用中select、poll和epoll有何区别?

大家好&#xff0c;我是小米&#xff0c;今天给大家分享一个我在搜狐畅游面试中被问到的问题&#xff1a;请说一下 Redis 的 IO 多路复用中 select、poll、epoll之间的区别是什么&#xff1f;为了更好地回答这个问题&#xff0c;我将从以下几个角度进行阐述&#xff1a;概念简介…

CANoe仿真面板设计

CANoe仿真面板设计 CANoe Panel介绍关键步骤操作步骤添加系统变量添加Control面板添加Display面板 创建Desktop CANoe Panel介绍 panel(面板〕是CA№e的一个重要功能&#xff0c;为总线仿真提供了图形化的界面。用户可以在面板上添加合适的控件实时地改变信号或变量的值。 控件…

无人机新手防炸飞行技巧

不要在室内飞行,容易撞墙。起飞前设置好避障和返航模式。使用模拟器熟练掌握操控。选择开阔环境目视起飞。使用低速档平稳飞行。合理使用避障功能,不要盲目依赖。使用九宫格避障法。留意电量,及时返航。极低电量时放弃强行返航。飞行后及时为电池充电保养。

基于springboot实现音乐网站与分享平台项目【项目源码+论文说明】

摘要 本论文主要论述了如何使用JAVA语言开发一个音乐网站与分享平台 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述音乐网站与分享平台的当前背景以及系统开…

oppo A57刷机包更新

ozip转zip方便把官网下载的ozip包转换为可刷机的zip sdat2img-master方便发烧友制作system.img详情请看redmi.txt

finalshell连接虚拟机中的ubuntu

finalshell下载地址: https://www.finalshell.org/ubuntu设置root密码&#xff1a; sudo passwd rootubuntu关闭防火墙&#xff1a; sudo ufw disable安装ssh # sudo apt update #更新数据(可以不执行) # sudo apt upgrade #更新软件(可以不执行) sudo apt install open…

基于workbench的PTFE矩形密封圈压缩回弹仿真分析

研究背景&#xff1a; 近年来随着工业发展和科技进步&#xff0c;高压容器使用场景逐渐增大&#xff0c;使用环境越发苛刻&#xff0c;如高温、高压以及内部压力的波动&#xff0c;这都对容器端面密封性能的要求更为严格。端面密封所用的密封件必须具备优良的回弹性能和耐化学…

毅速丨模具3D打印材料有哪些选择

当前1.2709和CX是市面上最常用的3D打印模具钢材料&#xff0c;模具3D打印有没有更多的材料选择呢&#xff1f; 据了解&#xff0c;上海毅速推出的几款3D打印新材料正在被越来越多的行业所采用。如毅速的EM191S高性能高抛光不锈钢粉末&#xff0c;这款材料的抗开裂和耐腐蚀性能是…

使用VirtualBox安装Ubuntu系统【保姆级】

一、下载VirtualBox软件安装包 进入VirtualBox官网下载&#xff1a;Oracle VM VirtualBox 二、下载Ubuntu系统镜像 进入Ubuntu官网&#xff1a;https://cn.ubuntu.com/ 1. 点击【桌面系统】&#xff0c;进入桌面系统界面 2. 点击【下载Ubuntu】 &#xff0c;进入Ubuntu桌面…

基于springboot实现在线blog博客平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线blog博客平台系统演示 摘要 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#x…

【Java学习之道】线程的创建与启动

引言 如果你正在学习Java编程&#xff0c;那么你可能已经知道Java是一种多线程编程语言。多线程编程可以帮助我们更高效地利用CPU&#xff0c;同时完成多项任务。但是&#xff0c;你可能还不知道如何在Java中创建和启动线程。在本节中&#xff0c;我们将深入探讨Java中的线程创…

MAC上使用Wireshark常见问题

文章目录 介绍正文启动异常-Permission denied解决方法 过滤协议和地址指定源地址和目的地址调整 time format 介绍 简单记录Wireshark在日常使用过程中的遇到的小case。 正文 Wireshark相较于tcpdump使用较为简单&#xff0c;交互也更为友好。 点击Start即可启动抓包 启动…