Problem:
Score : 300 points

Problem Statement

You are given an integer sequence of length N, a_1,a_2,...,a_N.

For each 1≤i≤N, you have three choices: add 1 to a_i, subtract 1 from a_i or do nothing.

After these operations, you select an integer X and count the number of i such that a_i=X.

Maximize this count by making optimal choices.

Constraints

1≤N≤10^5

0≤a_i<10^5 (1≤i≤N)

a_i is an integer.

Input

The input is given from Standard Input in the following format:

N
a_1 a_2 .. a_N

Output

Print the maximum possible number of i such that a_i=X.

Sample Input 1

7
3 1 4 1 5 9 2

Sample Output 1

4

For example, turn the sequence into 2,2,3,2,6,9,2 and select X=2 to obtain 4, the maximum possible count.

Sample Input 2

10
0 1 2 3 4 5 6 7 8 9

Sample Output 2

3

Sample Input 3

1
99999

Sample Output 3

1

Solution in Java8 (OpenJDK 1.8.0) (judge verdict: Accepted)

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

    Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        new Main().compute();
    }

    void compute() {
        int N = scanner.nextInt();
        List<Integer> a = new ArrayList<>();
        for (int i = 0; i < N; i++) {
            a.add(scanner.nextInt());
        }
        a.sort((o1, o2) -> o1 - o2);
        a.add(-2);

        List<Integer> nList = new ArrayList<>();
        int prev = -2, current = 0;
        for (int ai : a) {
            if (prev == ai) {
                current++;
            } else {
                nList.add(current);
                if (prev + 1 != ai) {
                    nList.add(0);
                    nList.add(0);
                }
                current = 1;
            }
            prev = ai;
        }
        nList = nList.subList(3, nList.size());

        int max = 0;
        for (int i = 0; i < nList.size() - 2; i++) {
            int c = nList.get(i) + nList.get(i + 1) + nList.get(i + 2);
            max = max > c ? max : c;
        }

        System.out.println(max);
    }
}