Count of elements that are binary searchable in the given array - GeeksforGeeks

28 Oct, 2021
Given an array arr[] consisting of N integers, the task is to find the maximum count of integers that are binary searchable in the given array.
Examples:
Input: arr[] = {1, 3, 2}Output: 2Explanation: arr[0], arr[1] can be found.
Input: arr[] = {3, 2, 1, 10, 23, 22, 21}Output: 3Explanation: arr[1], arr[3], arr[5] can be found using binary search irrespective of whether the array is sorted or not.
Approach: The given problem can be solved by searching for each element separately in the array using the Binary Search approach and increment the count of those integers that exist in the array. Follow the below steps to solve the problem:
Make a variable count = 0, that will store the count of elements that are binary searchable.
For each element perform the binary search in the range [0, N) as:Initialize the variable l as 0 and r as N-1 and perform the binary search for arr[i].For each iteration of the while loop till l is less than equal to r, calculate the mid-value denoted by (l + r)/2.If arr[mid] equals arr[i] then increment count by 1.If arr[mid] is less than arr[i], then change l as mid + 1.Otherwise, change r as mid – 1.
Initialize the variable l as 0 and r as N-1 and perform the binary search for arr[i].
For each iteration of the while loop till l is less than equal to r, calculate the mid-value denoted by (l + r)/2.If arr[mid] equals arr[i] then increment count by 1.If arr[mid] is less than arr[i], then change l as mid + 1.Otherwise, change r as mid – 1.
If arr[mid] equals arr[i] then increment count by 1.
If arr[mid] is less than arr[i], then change l as mid + 1.
Otherwise, change r as mid – 1.
The final answer will be stored in the variable count.
Below is the implementation of the above approach:
C++
Java
Python3
C#
Javascript
// C++ program for the above approach #include <bits/stdc++.h>using namespace std; // Function to find the total count of// elements that are binary searchableint totalBinarySearchable(vector<int> arr){     // Stores the count of element that    // are binary searchable    int count = 0;    int N = arr.size();     // For each element check if it can    // be found by doing a binary search    for (int i = 0; i < N; i++) {         // Binary search range        int l = 0, r = N - 1;         // Do a binary Search        while (l <= r) {            int mid = (l + r) / 2;             // Array element found            if (arr[mid] == arr[i]) {                count++;                break;            }            if (arr[mid] < arr[i]) {                l = mid + 1;            }            else {                r = mid - 1;            }        }    }     // Return the total count    return count;} // Driver Codeint main(){    vector<int> arr = { 3, 2, 1, 10,                        23, 22, 21 };    cout << totalBinarySearchable(arr);     return 0;}
// Java code for the above approachimport java.io.*; class GFG{       // Function to find the total count of    // elements that are binary searchable    static int totalBinarySearchable(int[] arr)    {         // Stores the count of element that        // are binary searchable        int count = 0;        int N = arr.length;         // For each element check if it can        // be found by doing a binary search        for (int i = 0; i < N; i++) {             // Binary search range            int l = 0, r = N - 1;             // Do a binary Search            while (l <= r) {                int mid = (l + r) / 2;                 // Array element found                if (arr[mid] == arr[i]) {                    count++;                    break;                }                if (arr[mid] < arr[i]) {                    l = mid + 1;                }                else {                    r = mid - 1;                }            }        }         // Return the total count        return count;    }     // Driver Code    public static void main(String[] args)    {        int[] arr = { 3, 2, 1, 10, 23, 22, 21 };         System.out.println(totalBinarySearchable(arr));    }} // This code is contributed by Potta Lokesh
# python program for the above approach # Function to find the total count of# elements that are binary searchabledef totalBinarySearchable(arr):         # Stores the count of element that        # are binary searchable    count = 0    N = len(arr)     # For each element check if it can    # be found by doing a binary search    for i in range(0, N):                 # Binary search range        l = 0        r = N - 1         # Do a binary Search        while (l <= r):            mid = (l + r) // 2             # Array element found            if (arr[mid] == arr[i]):                count += 1                break             if (arr[mid] < arr[i]):                l = mid + 1             else:                r = mid - 1         # Return the total count    return count # Driver Codeif __name__ == "__main__":     arr = [3, 2, 1, 10,           23, 22, 21]    print(totalBinarySearchable(arr))     # This code is contributed by rakeshsahni
// C# code for the above approachusing System;public class GFG{       // Function to find the total count of    // elements that are binary searchable    static int totalBinarySearchable(int[] arr)    {         // Stores the count of element that        // are binary searchable        int count = 0;        int N = arr.Length;         // For each element check if it can        // be found by doing a binary search        for (int i = 0; i < N; i++) {             // Binary search range            int l = 0, r = N - 1;             // Do a binary Search            while (l <= r) {                int mid = (l + r) / 2;                 // Array element found                if (arr[mid] == arr[i]) {                    count++;                    break;                }                if (arr[mid] < arr[i]) {                    l = mid + 1;                }                else {                    r = mid - 1;                }            }        }         // Return the total count        return count;    }     // Driver Code    public static void Main(string[] args)    {        int[] arr = { 3, 2, 1, 10, 23, 22, 21 };         Console.WriteLine(totalBinarySearchable(arr));    }} // This code is contributed by rrrtnx.
<script>// Javascript program for the above approach // Function to find the total count of// elements that are binary searchablefunction totalBinarySearchable(arr){   // Stores the count of element that  // are binary searchable  let count = 0;  let N = arr.length;   // For each element check if it can  // be found by doing a binary search  for (let i = 0; i < N; i++)  {       // Binary search range    let l = 0,      r = N - 1;     // Do a binary Search    while (l <= r) {      let mid = Math.floor((l + r) / 2);       // Array element found      if (arr[mid] == arr[i]) {        count++;        break;      }      if (arr[mid] < arr[i]) {        l = mid + 1;      } else {        r = mid - 1;      }    }  }   // Return the total count  return count;} // Driver Codelet arr = [3, 2, 1, 10, 23, 22, 21];document.write(totalBinarySearchable(arr)); // This code is contributed by gfgking.</script>
3
 
Time Complexity: O(N*log(N))Auxiliary Space: O(1)
rakeshsahni
gfgking
lokeshpotta20
rrrtnx
Binary Search
Arrays
Mathematical
Searching
Arrays
Searching
Mathematical
Binary Search
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Chocolate Distribution Problem
Window Sliding Technique
Reversal algorithm for array rotation
Next Greater Element
Find duplicates in O(n) time and O(1) extra space | Set 1
Program for Fibonacci numbers
Write a program to print all permutations of a given string
C++ Data Types
Set in C++ Standard Template Library (STL)
Coin Change | DP-7