题解 | #相差不超过k的最多数#
相差不超过k的最多数
https://www.nowcoder.com/practice/562630ca90ac40ce89443c91060574c6
经典双指针题目~ 熟悉的配方——
- 主线是右指针不断地去探索最大的符合条件的区间。
- 在探索的过程中,如果不满足区间条件,就右移左指针,直到[i,j]区间符合条件为止。这时候计算区间长度。
具体代码如下:
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int k = in.nextInt();
int[] data = new int[n];
for (int i = 0; i < n; i++) {
data[i] = in.nextInt();
}
System.out.println(mostNum(data, k));
}
public static int mostNum(int[] data, int k) {
Arrays.sort(data);
int i = 0;
int j = 1;
int max = 1;
while (j < data.length) {
// 为了在j进入区间时,使区间合法,就右移左指针
while (i < j && data[j] - data[i] > k) {
i++;
}
// 新区间
max = Math.max(max, j - i + 1);
j++;
}
return max;
}
}
#双指针经典题目#
查看10道真题和解析