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;
} 
相关推荐
WL_Aurora1 分钟前
【每日一题】贪心
python·算法
aqiu11111123 分钟前
【并查集专题top】
c++·算法
会周易的程序员26 分钟前
aiDgeScanner 工业设备网络扫描与管理工具
网络·c++·物联网·架构·electron·node.js·iot
叼烟扛炮38 分钟前
C++ 知识点17 友元
开发语言·c++·算法·友员
计算机安禾1 小时前
【c++面向对象编程】第2篇:类与对象(一):定义第一个类——成员变量与成员函数
开发语言·c++
richard_yuu1 小时前
数据结构|二叉树高阶进阶-经典算法
数据结构·c++·算法
不知名的忻1 小时前
Dijkstra算法(朴素版&堆优化版)
java·数据结构·算法··dijkstra算法
兩尛1 小时前
c++知识点5
开发语言·c++
澈2071 小时前
C++内存管理:new/delete与内存泄漏实战
开发语言·c++·内存分区