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;
} 
相关推荐
疯狂打码的少年1 小时前
【数据结构】图的遍历:深度优先搜索(DFS)
数据结构·笔记·算法·深度优先
-凌凌漆-2 小时前
【freertos】Task创建(v2)
java·开发语言·算法
牛油果子哥q2 小时前
C++内存模型与深浅拷贝万字详解:栈堆静态内存布局、深浅拷贝底层差异、内存泄漏根治、拷贝崩溃踩坑、手写深拷贝实战
java·开发语言·c++
大鹏的NLP博客2 小时前
通用 Linux 嵌入式板端 C/C++ ABI 与 Glibc 依赖治理规范
linux·c++·交叉编译
Nil2082 小时前
leetcode 24两两交换链表中的节点
算法·leetcode·链表
.格子衫.2 小时前
033动态规划之状态压缩DP——算法备赛
算法·动态规划
ysa0510303 小时前
c++常用自带函数用法与注意
c++·笔记·算法
带多刺的玫瑰4 小时前
Leecode#4刷题之寻找两个正序数组的中位数
java·前端·算法
土司大王4 小时前
LeetCode hot100——除了自身以外数组的乘积
数据结构·算法·leetcode