HackerRank Picking Numbers Solution in C

Given an array of integers, find the greatest subarray where the absolute difference between any two elements is less than or equal to 1.

void swap(int* xp, int* yp)
{
    int temp = *xp;
    *xp = *yp;
    *yp = temp;
}
 
// Function to perform Selection Sort
void selectionSort(int arr[], int n)
{
    int i, j, min_idx;
 
    // One by one move boundary of unsorted subarray
    for (i = 0; i < n - 1; i++) {
 
        // Find the minimum element in unsorted array
        min_idx = i;
        for (j = i + 1; j < n; j++)
            if (arr[j] < arr[min_idx])
                min_idx = j;
 
        // Swap the found minimum element
        // with the first element
        swap(&arr[min_idx], &arr[i]);
    }
}
int pickingNumbers(int n, int* a) {
    //int arr[n];
    selectionSort(a, n);
    int max=0, count;
    for(int i=0;i<n;i++)
        {
        count = 0;
        for(int j=i+1;j<n;j++)
            {
            if((a[j]-a[i]==1)||(a[j]-a[i]==0))
                count++;
        }
        if(max<count)
            {
            max = count;
        }
        else
            {
            
        }
    }
    return max+1;
}

Leave a Comment