Minimum length of jumps to avoid given array of obstacles - GeeksforGeeks

27 May, 2021
We are given coordinates of obstacles on a straight line. We start jumping from point 0, we need to reach the end, avoiding all obstacles. The length of every jump has to be the same (For example, if we jump from 0 to 4, then we must make the next jump from 4 to 8). We need to find the minimum length of the jump so that we can reach the 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 the locations of all obstacles in a hash table. We also find the maximum value of the obstacle. Then we tried all possible jump sizes from 1 to maximum. If any jump size leads to an obstacle, we do not consider that jump. 
CPP
Java
Python3
C#
Javascript
// C++ program to find length of a jump// to reach end avoiding all obstacles#include <bits/stdc++.h>#define mod 1000000007using 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 Codeint 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 program to find length of a jump// to reach end avoiding all obstaclesimport 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 program to find length of a jump# to reach end avoiding all obstaclesdef 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 Codea = [5, 3, 6, 7, 9]b = avoidObstacles(a)print(b) # This code is contributed by ViratJoshi
// C# program to find length of a jump// to reach end avoiding all obstaclesusing 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
<script>// Javascript program to find length of a jump// to reach end avoiding all obstacles     function avoidObstacles(obs)    {        // Insert all array elements in a hash table        // and find the maximum value in the array        let hs = new Set();        let max = obs[0];        for (let 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 (let i = 1; i <= max; i++) {            let j;            for (j = i; j <= max; j = j + i) {                   // if there is obstacle, break the loop.                if (hs.has(j))                    break;            }               // If above loop did not break            if (j > max)                return i;                }           return max+1;    }         // Driver Code    let a=[5, 3, 6, 7, 9 ];    let b = avoidObstacles(a);    document.write(b);  // This code is contributed by unknown2108</script>
4
 
29AjayKumar
ViratJoshi
mohit kumar 29
unknown2108
Arrays
Hash
Arrays
Hash
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Next Greater Element
Window Sliding Technique
Count pairs with given sum
Program to find sum of elements in a given array
Reversal algorithm for array rotation
Internal Working of HashMap in Java
Hashing | Set 1 (Introduction)
Count pairs with given sum
Hashing | Set 3 (Open Addressing)
Hashing | Set 2 (Separate Chaining)