Closest Numbers – HackerRank Solution

In this post, we will solve Closest Numbers HackerRank Solution. This problem (Closest Numbers) is a part of HackerRank Problem Solving series.

Solution – Closest Numbers – HackerRank Solution

C++

#include<iostream>
#include<algorithm>
#include<climits>
#include<vector>
using namespace std;

int a[200000];

vector<int> ansv;

int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    sort(a, a + n);
    int ans = INT_MAX;
    for (int i = 1; i < n; i++)
    {
        if (a[i] - a[i - 1] < ans)
        {
            ansv.clear();
            ans = a[i] - a[i - 1];
            ansv.push_back(a[i - 1]);
            ansv.push_back(a[i]);
        }
        else if (a[i] - a[i - 1] == ans)
        {
            ansv.push_back(a[i - 1]);
            ansv.push_back(a[i]);
        }
    }
    for (int i = 0; i < (int)ansv.size(); i++)
        cout << ansv[i] << " ";
    cout << endl;
    return 0;
}

Python

#!/bin/python3

import sys


def closestNumbers(arr):
    output = []
    arr = sorted(arr)
    nowmin = 10**9
    
    for ind in range(1, len(arr)):
        diff = abs(arr[ind-1] - arr[ind])
        
        if diff < nowmin:
            output = [(arr[ind-1], arr[ind])]
            nowmin = diff
        elif diff == nowmin:
            output.append((arr[ind-1], arr[ind]))
            
    flat_list = [item for sublist in output for item in sublist]
        
    return flat_list
    

if __name__ == "__main__":
    n = int(input().strip())
    arr = list(map(int, input().strip().split(' ')))
    result = closestNumbers(arr)
    print (" ".join(map(str, result)))

Java

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

public class Solution {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int[] array = new int[n];
        for(int i = 0; i < n; i++)
            array[i] = input.nextInt();
        
        Arrays.sort(array);
        int minAbs = Integer.MAX_VALUE; //Minimum absolute difference
        StringBuilder pairs = new StringBuilder("");
        
        for(int i = 0; i < n-1; i++)
        {
            int absDiff;
            
            if((array[i]<0 && array[i+1]<0)||(array[i]>0 && array[i+1]>0))//both numbers have matching signs
                absDiff = Math.abs(array[i] - array[i+1]); //Absolute difference
            else
                absDiff = Math.abs(array[i]) + Math.abs(array[i+1]); //Absolute difference
            
            if(absDiff < minAbs)//New minAbs
            {
                minAbs = absDiff;
                pairs = new StringBuilder("");//Empty pairs
                pairs.append(array[i]+ " " +array[i+1]+" ");//Add pair
            }
            else if(absDiff == minAbs)//Multiple minAbs
                pairs.append(array[i]+ " " +array[i+1]+" ");//Add pair
        }
        
        System.out.println(pairs);
    }
}

Note: This problem (Closest Numbers) is generated by HackerRank but the solution is provided by CodingBroz. This tutorial is only for Educational and Learning purpose.

Leave a Comment

Your email address will not be published. Required fields are marked *