Problem:
Score : 300 points

Problem Statement

Given are an integer X and an integer sequence of length N: p_1, \ldots, p_N.

Among the integers not contained in the sequence p_1, \ldots, p_N (not necessarily positive), find the integer nearest to X, that is, find the integer whose absolute difference with X is the minimum. If there are multiple such integers, report the smallest such integer.

Constraints

1 \leq X \leq 100

0 \leq N \leq 100

1 \leq p_i \leq 100

p_1, \ldots, p_N are all distinct.

All values in input are integers.

Input

Input is given from Standard Input in the following format:

X N
p_1 ... p_N

Output

Print the answer.

Sample Input 1

6 5
4 7 10 6 5

Sample Output 1

8

Among the integers not contained in the sequence 4, 7, 10, 6, 5, the one nearest to 6 is 8.

Sample Input 2

10 5
4 7 10 6 5

Sample Output 2

9

Among the integers not contained in the sequence 4, 7, 10, 6, 5, the ones nearest to 10 are 9 and 11. We should print the smaller one, 9.

Sample Input 3

100 0

Sample Output 3

100

When N = 0, the second line in the input will be empty. Also, as seen here, X itself can be the answer.

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

import java.util.*;
import java.lang.*;
import java.io.*;

class Main {
public static void main (String[] args) {
Scanner scn= new Scanner(System.in);
		
            int x=scn.nextInt();
            int n=scn.nextInt();
            HashMap<Integer,Integer> map=new HashMap<> ();
            int min=Integer.MAX_VALUE;
            int max=Integer.MIN_VALUE;
		    int a[]= new int[n];
		    for(int i=0; i<n; i++){
                a[i]=scn.nextInt();
                map.put(a[i],1);
                min=Math.min(min,a[i]);
                max=Math.max(max,a[i]);
            }
            if(n==0){
                System.out.println(x);
            } else 
		    System.out.println(some(a,x,n,map,min,max));
		
	}
	public static int some(int a[],int x, int n,HashMap<Integer,Integer> map, int min, int max){
        // if(x<=min) return min-1;
        // if(x>=max) return max+1; 
        if(x<min){
            if((x-1)<=min){
                return x-1;
            } else {
                return x+1;
            } 
        }
        if(x>max){
            if((x-1)>max){
                return x-1;
            } else {
                return x+1;
            }
        }
        ArrayList<Integer> al=new ArrayList<> ();
        for(int i=min; i<=max; i++){
            if(!map.containsKey(i)){
                al.add(i);
            }
        }
        if(al.size()==0){
            if(Math.abs((min-1)-x)>Math.abs((max+1)-x)){
                return max+1;
            } else {
                return min-1;
            }
        }
        int mans=Integer.MAX_VALUE;
        int ans=0;
        Collections.sort(al);
        while(al.size()!=0){
            int p=al.get(0);
            int temp=Math.abs(x-p);
            if(temp<mans){
                mans=temp;
                ans=p;
            }     
            al.remove(0);
        }
        return ans;
	}
}