- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Find the minimum of maximum length of a jump required to reach the last island in exactly k jumps in Python
Suppose we have an array A of numbers, in A the i-th number is the position where an island is present, and another integer k is given (1 ≤ k < N). Now, a person is standing on the 0-th island and has to reach the last island, by jumping from one island to another in exactly k jumps, we have to find the minimum of the maximum length of a jump a person will make in his/her journey. We have to keep in mind that the position of all the islands are given in ascending order.
So, if the input is like A = [7, 20, 41, 48], k = 2, then the output will be 28, as there are two ways to reach the last island 7 to 20 to 48, here the maximum distance between any two consecutive islands is between 48 and 20 that is 28. And 7 to 41 to 48 here the maximum distance between any two consecutive islands is between 41 and 7 that is 34. So, the minimum of 28 and 34 is 28.
To solve this, we will follow these steps −
Define a function isPossible() . This will take arr,dist, k
n := size of arr
req := 0
current := 0
previous := 0
for i in range 0 to n, do
while current is not same as n and (arr[current] - arr[previous]) <= dist, do
current := current + 1
req := req + 1
if current is same as n, then
come out from the loop
previous := current - 1
if current is not same as n, then
return False
if req <= k, then
return True
return False
From the main method, do the following −
n := size of arr
left := 0
right := last element of arr
ans := 0
while left −= right, do
mid := (left + right) / 2;
if isPossible(arr, mid, k) is non-zero, then
ans := mid
right := mid - 1
otherwise,
left := mid + 1
return ans
Example
Let us see the following implementation to get better understanding −
def isPossible(arr,dist, k) : n = len(arr) req = 0 current = 0 previous = 0 for i in range(0, n): while (current != n and (arr[current] - arr[previous]) <= dist): current += 1 req += 1 if (current == n): break previous = current - 1 if (current != n): return False if (req <= k): return True return False def minimum_distance(arr, k): n = len(arr) left = 0 right = arr[-1] ans = 0 while (left <= right): mid = (left + right) // 2; if (isPossible(arr, mid, k)): ans = mid right = mid - 1 else: left = mid + 1 return ans arr = [7, 20, 41, 48] k = 2 print(minimum_distance(arr, k))
Input
[7, 20, 41, 48] , 2
Output
28