This is a Java Program to find number of occurences of a given number using binary search approach. The time complexity of the following program is O (log n).
Here is the source code of the Java program to find number of occurences of a given number using binary search approach. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/*
* Java Program to Find the Number of occurrences of a given Number using Binary Search approach
*/
import java.util.Scanner;
public class NumberOfOccurences
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Enter number of elements in sorted array");
int N = scan.nextInt();
int[] arr = new int[ N ];
/* Accept N elements */
System.out.println("Enter "+ N +" sorted elements");
for (int i = 0; i < N; i++)
arr[i] = scan.nextInt();
System.out.println("Enter number to find occurences");
int num = scan.nextInt();
int f = occur(arr, num);
if (f == -1)
System.out.println("No occurence");
else
System.out.println("Occurences = "+ f);
}
public static int occur(int[] arr, int num)
{
/* find first index */
int l1 = first(arr, num);
/* find last index */
int l2 = last(arr, num);
if (l1 == -1 || l2 == -1)
return -1;
return l2 - l1 + 1;
}
public static int first(int[] arr, int num)
{
if (arr[0] == num)
return 0;
int start = 0, end = arr.length - 1;
int mid = (start + end) / 2;
int flag = 0;
while (!(arr[mid] == num && arr[mid - 1] < arr[mid]))
{
if (start == end)
{
flag = 1;
break;
}
if (arr[mid] >= num)
end = mid - 1;
if (arr[mid] < num)
start = mid + 1;
mid = (start + end) / 2;
}
if (flag == 0)
return mid;
return -1;
}
public static int last(int[] arr, int num)
{
if (arr[arr.length - 1] == num)
return arr.length - 1;
int start = 0, end = arr.length - 1;
int mid = (start + end) / 2;
int flag = 0;
while (!(arr[mid] == num && arr[mid + 1] > arr[mid]))
{
if (start == end)
{
flag = 1;
break;
}
if (arr[mid] > num)
end = mid - 1;
if (arr[mid] <= num)
start = mid + 1;
mid = (start + end) / 2;
}
if (flag == 0)
return mid;
return -1;
}
}
Enter number of elements in sorted array 10 Enter 10 sorted elements 1 1 3 3 3 3 4 4 4 5 Enter number to find occurences 3 Occurences = 4 Enter number of elements in sorted array 10 Enter 10 sorted elements 1 1 3 3 3 3 4 4 4 5 Enter number to find occurences 5 Occurences = 1
Related posts:
Using Optional with Jackson
Spring Boot - Securing Web Applications
A Guide to BitSet in Java
Spring WebClient Filters
Java Program to Construct an Expression Tree for an Infix Expression
Map Interface trong java
Java Program to Implement Merge Sort Algorithm on Linked List
Java Program to Perform Inorder Non-Recursive Traversal of a Given Binary Tree
Java String Conversions
Introduction to Spring Cloud Stream
Java Program to Implement CopyOnWriteArraySet API
Examine the internal DNS cache
Biểu thức Lambda trong Java 8 – Lambda Expressions
Java Program to Implement Horner Algorithm
Java Program to Implement CopyOnWriteArrayList API
Collection trong java
Fixing 401s with CORS Preflights and Spring Security
Spring MVC and the @ModelAttribute Annotation
Case-Insensitive String Matching in Java
Java Program to Implement a Binary Search Tree using Linked Lists
Configure a RestTemplate with RestTemplateBuilder
Spring Boot - Enabling Swagger2
Java Program to Implement LinkedBlockingQueue API
Java Program to Find Maximum Element in an Array using Binary Search
Introduction to Spring Cloud Netflix – Eureka
Wiring in Spring: @Autowired, @Resource and @Inject
Handle EML file with JavaMail
DistinctBy in the Java Stream API
Java Program to Check Whether a Weak Link i.e. Articulation Vertex Exists in a Graph
Java Program to Perform Postorder Recursive Traversal of a Given Binary Tree
Guide to CopyOnWriteArrayList
Life Cycle of a Thread in Java