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;
} 
相关推荐
罗西的思考4 小时前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
CSharp精选营7 小时前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
美团技术团队8 小时前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
用户8055336980314 小时前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
To_OC1 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC1 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
BadBadBad__AK1 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
卷无止境2 天前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
_清歌2 天前
DSpark 深度解读:DeepSeek-V4 如何用「半自回归」把推理速度提升 85%
算法