Java Program to find the number of occurrences of a given number using Binary Search approach

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:

Java Program to Search for an Element in a Binary Search Tree
Basic Authentication with the RestTemplate
String Joiner trong Java 8
The Order of Tests in JUnit
Java Program to Implement Merge Sort Algorithm on Linked List
Java Program to Implement a Binary Search Tree using Linked Lists
Java Program to Compute the Area of a Triangle Using Determinants
Java Program to Implement Dijkstra’s Algorithm using Priority Queue
Overflow and Underflow in Java
Cơ chế Upcasting và Downcasting trong java
Simple Single Sign-On with Spring Security OAuth2
Java 8 Collectors toMap
Java Program to Find the Nearest Neighbor Using K-D Tree Search
Phương thức tham chiếu trong Java 8 – Method References
Java Program to Implement Hash Tables Chaining with Doubly Linked Lists
A Guide to BitSet in Java
Introduction to Java Serialization
Hướng dẫn sử dụng Java String, StringBuffer và StringBuilder
Remove HTML tags from a file to extract only the TEXT
Java Program to Implement HashTable API
Java Program to Find Nearest Neighbor for Dynamic Data Set
Java Program to Implement Flood Fill Algorithm
Java Program to Implement the Hill Cypher
The Dining Philosophers Problem in Java
Guide to the Java TransferQueue
Thực thi nhiều tác vụ cùng lúc như thế nào trong Java?
Giới thiệu Java 8
Dynamic Proxies in Java
Java Program to Perform Addition Operation Using Bitwise Operators
Testing in Spring Boot
Giới thiệu Java Service Provider Interface (SPI) – Tạo các ứng dụng Java dễ mở rộng
Java InputStream to String