HJ181 相差不超过k的最多数

  • 题目
  • 题解(53)
  • 讨论(29)
  • 排行

中等 通过率:29.67% 时间限制:1秒 空间限制:256M

知识点双指针

校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

描述

给定一个包含 nn 个正整数的数组 a1,a2,...,ana1​,a2​,...,an​。你需要从中选择若干个数(可以全部也可以一个都不选),使得在所选集合中任意两数的差的绝对值均不超过给定整数 kk。

请输出能够选出的元素个数的最大值。

【名词解释】

若选出的元素集合为 SS,则要求 max⁡(S)−min⁡(S)≦kmax(S)−min(S)≦k。

输入描述:

第一行输入两个整数 n,k(1≦n≦2×105, 1≦k≦109)n,k(1≦n≦2×105, 1≦k≦109)。

第二行输入 nn 个整数 a1,a2,...,an(1≦ai≦109)a1​,a2​,...,an​(1≦ai​≦109)。

输出描述:

输出一个整数,表示满足条件的最多可选元素数量。

示例1

输入:

复制代码
5 3
2 1 5 3 2

复制输出:

复制代码
4

复制说明:

复制代码
选取元素集合 {1,2,2,3}{1,2,2,3} 满足最大值与最小值之差为 33,且无法再加入 55。
cpp 复制代码
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
	int n,k;
	cin>>n>>k;
	int a[n];
	for(int i=0;i<n;i++)cin>>a[i];
	sort(a,a+n);
	int l=0,r=1;
	int max=1;
	while(r<n){
		if(a[r]-a[l]<=k){
			if(max<r-l+1)max=r-l+1;
			r++;
		}
		else if(l<r){
			l++;
		}
	}
	cout<<max;
} 
相关推荐
嘿黑嘿呦11 分钟前
数据结构-图论-最短路径
数据结构·图论
不会C语言的男孩11 分钟前
C++ Primer 第3章:字符串、向量和数组
开发语言·c++
ʚ希希ɞ ྀ12 分钟前
岛屿数量 -- 图论
算法·深度优先·图论
code monkey.1 小时前
【Linux之旅】Linux 应用层自定义协议与序列化:从粘包问题到网络计算器
linux·网络·c++
草莓熊Lotso1 小时前
【Linux网络】深入理解 HTTP 协议(二):从协议格式到手写工业级 HTTP 服务器
linux·运维·服务器·网络·c++·http
aWty_1 小时前
实分析入门(11)--Cantor三分集
学习·数学·算法·实变函数
兰令水1 小时前
leecodecode【二叉树递归+对称】【2026.6.1打卡-java版本】
算法
地平线开发者9 小时前
profiler debug 工具用法与高一致性策略
算法·自动驾驶
编程大师哥9 小时前
匿名函数 lambda + 高阶函数
java·python·算法
我叫袁小陌10 小时前
算法解题思路指南
算法