Search Minimum number in Rotated and Sorted Array in Java using Binary Search
Problem Description :
Suppose an array of length n
sorted in ascending order is rotated between 1
and n
times. For example, the array nums = [0,1,2,4,5,6,7]
might become:
- [5, 6, 7, 0, 1, 2, 4] if it was rotated 3 times.
- [2, 4, 5, 6, 7, 0, 1] if it was rotated 5 times.
Example 1 :
Input :
[5, 6, 7, 0, 1, 2, 4]
Output :
0
Example 2 :
Input :
[5, 8, 10, 15, 20, 50, 100, 200]
Output :
5
Example 3 :
Input :
[100, 50, 25, 5, 1]
Output :
1
We will use Binary Search for finding solution.
Solution 1 : Find Minimum Element in Rotated Sorted Array in Java
import java.util.Scanner;
public class FindMinimumInRotatedSortedArray {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter array size : ");
int size = sc.nextInt();
int[] array = new int[size];
// Taking user inputs
System.out.println("Enter array elements :");
for (int i = 0; i < array.length; i++) {
array[i] = sc.nextInt();
}
System.out.println("Output : "+findMinimum(array));
}
public static int findMinimum(int[] nums) {
int start = 0;
int end = nums.length-1;
// If array is not rotated
if (nums[start] <= nums[end]) {
return nums[0];
}
while (start <= end) {
int mid = (start+end)/2;
if (nums[mid] > nums[mid+1]) {
return nums[mid+1];
} else if (nums[mid] < nums[mid-1]) {
return nums[mid];
} else if (nums[start] <= nums[mid]) {
start = mid+1;
} else if (nums[mid] <= nums[end]) {
end = mid-1;
}
}
return -1;
}
}
Solution Explanation :
- Take two variables, start as 0 ad end as array length.
- In first condition check for array does not rotated. If it does not rotated just return 0th element of array no need to do anything else.
- Otherwise go through start <= end
- Take mid index.
- Here compare mid with mid+1 and mid-1 and return minimum element accordingly.
- Else skip left part if start <= mid or skip right part if mid <= end.
Other Similar Tutorials :
Comments
Post a Comment