Open In App

Jolly Jumper Sequence

Improve
Improve
Like Article
Like
Save
Share
Report

A sequence of n numbers (n < 3000) is called Jolly Jumper if the absolute values of the differences between the successive elements take on all possible values from 1 through n-1. The definition implies that any sequence of a single integer is a jolly jumper.

Examples: 

Input: 1 4 2 3
Output: True
This sequence 1 4 2 3 is Jolly Jumper because
the absolute differences are 3, 2, and 1.

Input: 1 4 2 -1 6  
Output: False
The absolute differences are 3, 2, 3, 7. 
This does not contain  all the  values from 1 
through n-1. So, this sequence is not Jolly.

Input: 11 7 4 2 1 6
Output: True

The idea is to maintain a boolean array to store set of absolute difference of successive elements. 

  1. If absolute difference between two elements is more than n-1 or 0, return false. 
  2. If an absolute difference repeated, then all absolute differences from 1 to n-1 can’t be present (Pigeon Hole Principle), return false.

Below is the implementation based on above idea. 

C++




// Program for Jolly Jumper Sequence
#include<bits/stdc++.h>
using namespace std;
 
// Function to check whether given sequence is
// Jolly Jumper or not
bool isJolly(int a[], int n)
{
    // Boolean vector to diffSet set of differences.
    // The vector is initialized as false.
    vector<bool> diffSet(n, false);
 
    // Traverse all array elements
    for (int i=0; i < n-1 ; i++)
    {
        // Find absolute difference between current two
        int d = abs(a[i]-a[i+1]);
 
        // If difference is out of range or repeated,
        // return false.
        if (d == 0 || d > n-1 || diffSet[d] == true)
            return false;
 
        // Set presence of d in set.
        diffSet[d] = true;
    }
 
    return true;
}
 
// Driver Code
int main()
{
    int a[] = {11, 7, 4, 2, 1, 6};
    int n = sizeof(a)/ sizeof(a[0]);
    isJolly(a, n)? cout << "Yes" : cout << "No";
    return 0;
}


Java




// Program for Jolly Jumper Sequence
import java.util.*;
 
class GFG
{
 
// Function to check whether given sequence
// is Jolly Jumper or not
static boolean isJolly(int a[], int n)
{
    // Boolean vector to diffSet set of differences.
    // The vector is initialized as false.
    boolean []diffSet = new boolean[n];
 
    // Traverse all array elements
    for (int i = 0; i < n - 1 ; i++)
    {
        // Find absolute difference
        // between current two
        int d = Math.abs(a[i] - a[i + 1]);
 
        // If difference is out of range or repeated,
        // return false.
        if (d == 0 || d > n - 1 ||
            diffSet[d] == true)
            return false;
 
        // Set presence of d in set.
        diffSet[d] = true;
    }
    return true;
}
 
// Driver Code
public static void main(String[] args)
{
    int a[] = {11, 7, 4, 2, 1, 6};
    int n = a.length;
    if(isJolly(a, n))
        System.out.println("Yes");
    else
        System.out.println("No");
}
}
 
// This code is contributed by Rajput-Ji


Python3




# Python3 Program for Jolly Jumper
# Sequence
 
# Function to check whether given
# sequence is Jolly Jumper or not
def isJolly(a, n):
 
    # Boolean vector to diffSet set
    # of differences. The vector is
    # initialized as false.
    diffSet = [False] * n
 
    # Traverse all array elements
    for i in range(0, n-1):
     
        # Find absolute difference between
        # current two
        d = abs(a[i]-a[i + 1])
 
        # If difference is out of range or
        # repeated, return false.
        if (d == 0 or d > n-1 or diffSet[d] == True):
            return False
 
        # Set presence of d in set.
        diffSet[d] = True
     
    return True
     
# Driver Code
a = [11, 7, 4, 2, 1, 6]
n = len(a)
 
print("Yes") if isJolly(a, n) else print("No")
 
# This code is contributed by
# Smitha Dinesh Semwal


C#




// Program for Jolly Jumper Sequence
using System;
 
class GFG
{
 
// Function to check whether given sequence
// is Jolly Jumper or not
static Boolean isJolly(int []a, int n)
{
    // Boolean vector to diffSet set of differences.
    // The vector is initialized as false.
    Boolean []diffSet = new Boolean[n];
 
    // Traverse all array elements
    for (int i = 0; i < n - 1 ; i++)
    {
        // Find absolute difference
        // between current two
        int d = Math.Abs(a[i] - a[i + 1]);
 
        // If difference is out of range or repeated,
        // return false.
        if (d == 0 || d > n - 1 ||
            diffSet[d] == true)
            return false;
 
        // Set presence of d in set.
        diffSet[d] = true;
    }
    return true;
}
 
// Driver Code
public static void Main(String[] args)
{
    int []a = {11, 7, 4, 2, 1, 6};
    int n = a.Length;
    if(isJolly(a, n))
        Console.WriteLine("Yes");
    else
        Console.WriteLine("No");
}
}
 
// This code is contributed by PrinciRaj1992


Javascript




<script>
 
// Javascript program for Jolly Jumper Sequence
 
// Function to check whether given sequence is
// Jolly Jumper or not
function isJolly(a, n)
{
     
    // Boolean vector to diffSet set of
    // differences. The vector is
    // initialized as false.
    let diffSet = new Array(n).fill(false);
 
    // Traverse all array elements
    for(let i = 0; i < n - 1; i++)
    {
         
        // Find absolute difference between
        // current two
        let d = Math.abs(a[i] - a[i + 1]);
 
        // If difference is out of range or repeated,
        // return false.
        if (d == 0 || d > n - 1 ||
            diffSet[d] == true)
            return false;
 
        // Set presence of d in set.
        diffSet[d] = true;
    }
    return true;
}
 
// Driver Code
let a = [ 11, 7, 4, 2, 1, 6 ];
let n = a.length;
 
isJolly(a, n) ? document.write("Yes") :
                document.write("No");
                 
// This code is contributed by _saurabh_jaiswal
 
</script>


Output: 

Yes

Time Complexity: O(n)

Auxiliary Space :O(n), since we used vector of size n.



Last Updated : 20 Mar, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads