Skip to content
Related Articles

Related Articles

Minimum length of jumps to avoid given array of obstacles
  • Difficulty Level : Easy
  • Last Updated : 19 Feb, 2020

We are given coordinates of obstacles on a straight line. We start jumping from point 0, we need to reach end avoiding all obstacles. Length of every jump has to be same (For example, if we jump from 0 to 4, then we must make next jump from 4 to 8). We need to find the minimum length of jump so that we can reach end and we avoid all obstacles.

Examples:

Input : obs[] = [5, 3, 6, 7, 9]
Output : 4
Obstacles are at points 3, 5, 6, 7 and 9
We jump from 0 to 4, then 4 to 8, then 4
to 12. This is how we reach end with jumps
of length 4. If we try lower jump lengths,
we cannot avoid all obstacles.

Input : obs[] = [5, 8, 9, 13, 14]
Output : 6

*

We insert locations of all obstacles in a hash table. We also find maximum value of obstacle. Then we try all possible jump sizes from 1 to maximum. If any jump size leads to a obstacle, we do not consider that jump.

CPP




// C++ program to find length of a jump
// to reach end avoiding all obstacles 
#include <bits/stdc++.h>
#define mod 1000000007
using namespace std;
  
int avoidObstacles(unordered_set<int> obs)
{
  
    // set jump distance to 1
    int jump_dist = 1;
  
    // flag to check if current jump distance
    // hits an obstacle
    bool obstacle_hit = true;
  
    while(obstacle_hit)
    {
  
        obstacle_hit = false;
        jump_dist += 1;
  
        // checking if jumping with current length
        // hits an obstacle
        for (auto i:obs)
        {
            if (i % jump_dist == 0)
            {
  
                // if obstacle is hit repeat process
                // after increasing jump distance
                obstacle_hit = true;
                break;
            }
            }
        
  
    return jump_dist;
}
  
// Driver Code
int main()
{
    unordered_set<int> a = {5, 3, 6, 7, 9};
    int b = avoidObstacles(a);
    cout << b;
}
  
// This code is contributed by mohit kumar 29


Java




// Java program to find length of a jump
// to reach end avoiding all obstacles
import java.util.*;
  
public class obstacle {
    static int avoidObstacles(int[] obs)
    {
        // Insert all array elements in a hash table
        // and find the maximum value in the array
        HashSet<Integer> hs = new HashSet<Integer>();
        int max = obs[0];
        for (int i=0; i<obs.length; i++)
        {
            hs.add(obs[i]);
            max = Math.max(max, obs[i]);
        }
  
        // checking for every possible length which
        // yield us solution
        for (int i = 1; i <= max; i++) {
            int j;
            for (j = i; j <= max; j = j + i) {
  
                // if there is obstacle, break the loop.
                if (hs.contains(j)) 
                    break;
            }
  
            // If above loop did not break
            if (j > max) 
                return i;         
        }
  
        return max+1;
    }
  
    // Driver Code
    public static void main(String[] args)
    {
        int a[] = new int[] { 5, 3, 6, 7, 9 };
        int b = avoidObstacles(a);
        System.out.println(b);
    }
}


Python3




# Python3 program to find length of a jump
# to reach end avoiding all obstacles
def avoidObstacles(obs):
      
    # sort the list in ascending order
    obs = sorted(obs)
      
    # set jump distance to 1
    jump_dist = 1
      
    # flag to check if current jump distance 
    # hits an obstacle
    obstacle_hit = True
  
    while(obstacle_hit):
          
        obstacle_hit = False
        jump_dist += 1
          
        # checking if jumping with current length
        # hits an obstacle
        for i in range(0, len(obs)):
            if obs[i] % jump_dist == 0:
                  
                # if obstacle is hit repeat process
                # after increasing jump distance
                obstacle_hit = True
                break
  
    return jump_dist
      
# Driver Code
a = [5, 3, 6, 7, 9]
b = avoidObstacles(a)
print(b)
  
# This code is contributed by ViratJoshi


C#




// C# program to find length of a jump
// to reach end avoiding all obstacles
using System;
using System.Collections.Generic;
  
public class obstacle 
{
    static int avoidObstacles(int[] obs)
    {
        // Insert all array elements in a hash table
        // and find the maximum value in the array
        HashSet<int> hs = new HashSet<int>();
        int max = obs[0];
        for (int i = 0; i < obs.Length; i++)
        {
            hs.Add(obs[i]);
            max = Math.Max(max, obs[i]);
        }
  
        // checking for every possible length which
        // yield us solution
        for (int i = 1; i <= max; i++) 
        {
            int j;
            for (j = i; j <= max; j = j + i)
            {
  
                // if there is obstacle, break the loop.
                if (hs.Contains(j)) 
                    break;
            }
  
            // If above loop did not break
            if (j > max) 
                return i;         
        }
        return max+1;
    }
  
    // Driver Code
    public static void Main()
    {
        int []a = new int[] { 5, 3, 6, 7, 9 };
        int b = avoidObstacles(a);
        Console.WriteLine(b);
    }
}
  
// This code is contributed by 29AjayKumar


Output:

4

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up
Recommended Articles
Page :