Given an array arr of integers of the size of N, our task is to find the count of positive numbers and negative numbers in the array.
Examples:
Input: arr[] = [-9,7,-5,3,2]
Output: Positive elements = 3, Negative elements = 2Input: arr[] = [5,4,-2,-1,-7]
Output: Positive elements = 2, Negative elements = 3
Approach:
- Traverse the elements in the array one by one.
- Find the element positive or not positive by using the condition element >=0. If the condition is satisfied increase the p_count.
- Remove the p_count from the total number of elements to get count negative numbers in the array.
- Print the positive and negative numbers count.
Example:
// C++ program to find the count of positive
// and negative integers in an array
#include<bits/stdc++.h>
using namespace std;
//function to calculate the positive numbers in an array
int CountPositive(int arr[],int n){
int p_count = 0;
for(int i =0;i<n;i++){
if (arr[i]>=0){
p_count++;
}
}
return p_count;
}
//Function to print the array
void printArray(int arr[],int n){
cout<<"Array: ";
for(int i = 0; i<n; i++){
cout<<arr[i]<<" ";
}
cout<<"\n";
}
// Driver program
int main()
{
int arr[] = {-9,7,-5,3,2 };
int n;
n = sizeof(arr) / sizeof(arr[0]);
printArray(arr, n);
int p_count = CountPositive(arr,n);
cout<<"Count of Positive elements = "<<p_count<<", ";
cout<<"Count of Negative elements = "<<n - p_count;
return 0;
}
Output
Array: -9 7 -5 3 2 Count of Positive elements = 3, Count of Negative elements = 2
Time complexity: O(n)
Auxiliary space: O(1)
Method: Using Recursion
// C++ program to find the count of positive
// and negative integers in an array
#include<bits/stdc++.h>
using namespace std;
//Defining recursive function to calculate no of positive in an array
int CountPositive(int begin,int arr[],int n,int pos_count){
if (begin==n) //base condition
return pos_count;
if (arr[begin]>=0) //checking whether no is positive or not
pos_count++;
return CountPositive(begin+1,arr,n,pos_count); //recursive calling
}
//Function to print the array
void printArray(int arr[],int n){
cout<<"Array: ";
for(int i = 0; i<n; i++){
cout<<arr[i]<<" ";
}
cout<<"\n";
}
// Driver program
int main()
{
int arr[] = {-9,7,-5,3,2 };
int n;
n = sizeof(arr) / sizeof(arr[0]);
printArray(arr, n);
int p_count = CountPositive(0,arr,n,0); //calling recursive function
cout<<"Count of Positive elements = "<<p_count<<", ";
cout<<"Count of Negative elements = "<<n - p_count;
return 0;
}
Output
Array: -9 7 -5 3 2 Count of Positive elements = 3, Count of Negative elements = 2
Time complexity: O(n)
Auxiliary space: O(n)
Another approach using C++ Standard Template Library (STL) and 'count_if()'function:
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int arr[] = {-9,7,-5,3,2};
int n = sizeof(arr) / sizeof(arr[0]);
cout<<"Array: ";
for(int i = 0; i<n; i++){
cout<<arr[i]<<" ";
}
cout<<"\n";
// use count_if function to count positive and negative numbers
int pos_count = count_if(arr, arr + n, [](int x) { return x >= 0; });
int neg_count = count_if(arr, arr + n, [](int x) { return x < 0; });
// print the counts
cout << "Count of Positive elements ="<< pos_count<<", ";
cout << "Count of Negative elements = " << neg_count;
return 0;
}
Output
Array: -9 7 -5 3 2 Count of Positive elements =3, Count of Negative elements = 2
Time complexity: O(n)
Auxiliary space: O(n)
Another Efficient Approach ( Using binary search ) :
- If the array is not sorted , then first sort the array.
- Using Binary Search to get the last index of negative number in the sorted array.
- Initialize index as last index of negative number to -1 in array because ,if there is no negative number in the array , then it will return -1 as last index of negative number.
- Count of negative numbers will be ' index +1 ' because we are using 0-based indexing
- Count of positive numbers will be 'count of total numbers - count of negative numbers in the array .
- Print final answer .
Below is the implementation of the above approach:
// C++ implementation of the above approach
#include <bits/stdc++.h>
using namespace std;
// Function to find last index of negative number
// in the sorted array
int BinarySearch(int *arr, int n)
{
int l = 0, r = n-1, index = -1;// Initialize index as -1 initially
while(l <= r)
{
int mid = (l + r) / 2;
// if arr[mid] is negative , then we will not search
// in the range [l,mid-1] because last index of negative
//number will be in the range [mid,r] in the sorted array
if(arr[mid]<0)
{
l = mid + 1;
index=mid;// updating rightmost index of
// negative number every time in the sorted array
}
else
{
r = mid - 1;
}
}
// return last index of negative number
return index;
}
// Function to print array elements
void printArray(int *arr,int n)
{
cout<<"Array: ";
for(int i = 0; i<n; i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
// Drive Code
int main()
{
int arr[] = {-9,7,-5,3,2 };
int n = sizeof(arr) / sizeof(arr[0]);
printArray(arr, n);
//sorting array for binary search
sort(arr,arr+n);
int neg_count = BinarySearch(arr, n)+1;
int pos_count = n - neg_count;
// print the counts
cout << "Count of Positive elements = "<< pos_count<<", ";
cout << "Count of Negative elements = " << neg_count<<endl;
return 0;
}
// This code is contributed by nikhilsainiofficial546
Output
Array: -9 7 -5 3 2 Count of Positive elements = 3, Count of Negative elements = 2
Time complexity: O(n*log2n)
Auxiliary space: O(1)