# Frequency of an integer in the given array using Divide and Conquer

Given an unsorted array arr[] and an integer K, the task is to count the occurrences of K in the given array using Divide and Conquer method.

Examples:

Input: arr[] = {1, 1, 2, 2, 2, 2, 3}, K = 1
Output: 2

Input: arr[] = {1, 1, 2, 2, 2, 2, 3}, K = 4
Output: 0

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: The idea is to divide the array into two parts of equal sizes and count the number of occurrences of K in each half and then add them up.

• Divide the array into two parts until there is only one element left in the array.
• Check that single element in the array is K or not, If it is K then return 1 otherwise 0.
• Add up the returned values for each of the element to find the occurence of K in the whole array.

Below is the implementation of the above approach:

## C++

 `// C++ implrmrntation of the approach ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Function to return the frequency of x ` `// in the subarray arr[low...high] ` `int` `count(``int` `arr[], ``int` `low, ``int` `high, ``int` `x) ` `{ ` ` `  `    ``// If the subarray is invalid or the ` `    ``// element is not found ` `    ``if` `((low > high) ` `        ``|| (low == high && arr[low] != x)) ` `        ``return` `0; ` ` `  `    ``// If there's only a single element ` `    ``// which is equal to x ` `    ``if` `(low == high && arr[low] == x) ` `        ``return` `1; ` ` `  `    ``// Divide the array into two parts and ` `    ``// then find the count of occurrences ` `    ``// of x in both the parts ` `    ``return` `count(arr, low, ` `                 ``(low + high) / 2, x) ` `           ``+ count(arr, 1 + (low + high) / 2, ` `                   ``high, x); ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `arr[] = { 30, 1, 42, 5, 56, 3, 56, 9 }; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(``int``); ` `    ``int` `x = 56; ` ` `  `    ``cout << count(arr, 0, n - 1, x); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implrmrntation of the approach ` ` `  `class` `GFG { ` ` `  `    ``// Function to return the frequency of x ` `    ``// in the subarray arr[low...high] ` `    ``static` `int` `count(``int` `arr[], ``int` `low, ` `                     ``int` `high, ``int` `x) ` `    ``{ ` ` `  `        ``// If the subarray is invalid or the ` `        ``// element is not found ` `        ``if` `((low > high) ` `            ``|| (low == high && arr[low] != x)) ` `            ``return` `0``; ` ` `  `        ``// If there's only a single element ` `        ``// which is equal to x ` `        ``if` `(low == high && arr[low] == x) ` `            ``return` `1``; ` ` `  `        ``// Divide the array into two parts and ` `        ``// then find the count of occurrences ` `        ``// of x in both the parts ` `        ``return` `count(arr, low, ` `                     ``(low + high) / ``2``, x) ` `            ``+ count(arr, ``1` `+ (low + high) / ``2``, ` `                    ``high, x); ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String args[]) ` `    ``{ ` `        ``int` `arr[] = { ``30``, ``1``, ``42``, ``5``, ``56``, ``3``, ``56``, ``9` `}; ` `        ``int` `n = arr.length; ` `        ``int` `x = ``56``; ` `        ``System.out.print(count(arr, ``0``, n - ``1``, x)); ` `    ``} ` `} `

## Python3

 `# Python3 implrmrntation of the approach ` ` `  `# Function to return the frequency of x ` `# in the subarray arr[low...high] ` `def` `count(arr, low, high, x): ` ` `  `    ``# If the subarray is invalid or the ` `    ``# element is not found ` `    ``if` `((low > high) ``or` `(low ``=``=` `high ``and` `arr[low] !``=` `x)): ` `        ``return` `0``; ` ` `  `    ``# If there's only a single element ` `    ``# which is equal to x ` `    ``if` `(low ``=``=` `high ``and` `arr[low] ``=``=` `x): ` `        ``return` `1``; ` ` `  `    ``# Divide the array into two parts and ` `    ``# then find the count of occurrences ` `    ``# of x in both the parts ` `    ``return` `count(arr, low, (low ``+` `high) ``/``/` `2``, x) ``+``\ ` `    ``count(arr, ``1` `+` `(low ``+` `high) ``/``/` `2``, high, x); ` ` `  `# Driver code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``arr ``=` `[ ``30``, ``1``, ``42``, ``5``, ``56``, ``3``, ``56``, ``9``]; ` `    ``n ``=` `len``(arr); ` `    ``x ``=` `56``; ` `    ``print``(count(arr, ``0``, n ``-` `1``, x)); ` ` `  `# This code is contributed by PrinciRaj1992 `

## C#

 `// C# implrmrntation of the approach  ` `using` `System; ` ` `  `class` `GFG ` `{  ` ` `  `    ``// Function to return the frequency of x  ` `    ``// in the subarray arr[low...high]  ` `    ``static` `int` `count(``int` `[]arr, ``int` `low,  ` `                    ``int` `high, ``int` `x)  ` `    ``{  ` ` `  `        ``// If the subarray is invalid or the  ` `        ``// element is not found  ` `        ``if` `((low > high)  ` `            ``|| (low == high && arr[low] != x))  ` `            ``return` `0;  ` ` `  `        ``// If there's only a single element  ` `        ``// which is equal to x  ` `        ``if` `(low == high && arr[low] == x)  ` `            ``return` `1;  ` ` `  `        ``// Divide the array into two parts and  ` `        ``// then find the count of occurrences  ` `        ``// of x in both the parts  ` `        ``return` `count(arr, low,  ` `                    ``(low + high) / 2, x)  ` `            ``+ count(arr, 1 + (low + high) / 2,  ` `                    ``high, x);  ` `    ``}  ` ` `  `    ``// Driver code  ` `    ``public` `static` `void` `Main()  ` `    ``{  ` `        ``int` `[]arr = { 30, 1, 42, 5, 56, 3, 56, 9 };  ` `        ``int` `n = arr.Length;  ` `        ``int` `x = 56;  ` `        ``Console.Write(count(arr, 0, n - 1, x));  ` `    ``}  ` `}  ` ` `  `// This code is contributed by AnkitRai01 `

Output:

```2
```

Time Complexity: O(N)

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : AnkitRai01, princiraj1992