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;
} 
相关推荐
不会就选b2 小时前
C++补充部分(一)--lambda 表达式
开发语言·c++
罗西的思考8 小时前
【Agentic RL】Dressage Staleness 控制深度分析
人工智能·算法·机器学习
quaer8 小时前
弗洛伊德算法--判圈法寻找环的入口O(n) O(1)
数据结构·算法
丰色木夕9 小时前
Ubuntu22.04下源码编译安装USD-Brep
c++·ubuntu·nvidia·usd-brep
高晶10 小时前
无乘法器实现LC二阶滤波器:基于移位运算的快速算法与四种精度推导
算法·设计模式·程序员
ysbfsy10 小时前
大数计算思路
算法
高晶10 小时前
主从自动分配算法:平均值乘以设备数一半的选举基准值解析
算法·设计模式·程序员
学电子她就能回来吗10 小时前
LeetCode Hot 100|普通数组专题学习笔记(零基础版)
笔记·算法·leetcode
用户老李10 小时前
反向传播计算梯度举例
算法
niyongsheng10 小时前
多智能体连续时间内路径规划:AA-SIPP(m) 的 Rust 实现与算法
算法·rust·机器人