题解 | #相差不超过k的最多数#

相差不超过k的最多数

https://www.nowcoder.com/practice/562630ca90ac40ce89443c91060574c6

经典双指针题目~ 熟悉的配方——

  1. 主线是右指针不断地去探索最大的符合条件的区间。
  2. 在探索的过程中,如果不满足区间条件,就右移左指针,直到[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;
    }
}
#双指针经典题目#
全部评论

相关推荐

评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务