C++程序 统计数组中的正数和负数

C++程序 统计数组中的正数和负数

给出大小为N的整数数组 arr ,我们的任务是在数组中找到正数和负数的数量。

示例:

输入: arr[] = [-9,7,-5,3,2]

输出: 正数个数=3,负数个数=2

输入: arr[] = [5,4,-2,-1,-7]

输出: 正数个数=2,负数个数=3

方法:

  • 逐个遍历数组中的元素。
  • 使用条件元素 >=0 来查找元素的正负。 如果满足条件,则增加 p_count 值。
  • 从所有元素的总数中减去 p_count 以获取数组中负数的数量。
  • 打印正数和负数的数量。

示例:

// 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<<"正数个数 = "<<p_count<<", ";
  cout<<"负数个数 = "<<n - p_count;

  return 0;
}  

输出:

Array: -9 7 -5 3 2 
正数个数 = 3,负数个数 = 2

时间复杂度: O(n)

辅助空间: O(1)

方法2: 递归

// 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<<"正数个数 = "<<p_count<<", ";
  cout<<"负数个数 = "<<n - p_count;

  return 0;
}  

输出:

Array: -9 7 -5 3 2 
正数个数 = 3,负数个数 = 2

时间复杂度: O(n)

辅助空间: O(n)

另一种方法:使用C ++标准模板库(STL)和 ‘count_if()’函数:

#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";
  
  // 使用 count_if 函数来计算正数和负数的个数
  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; });
 
  // 输出个数
  cout << "Count of Positive elements ="<< pos_count<<", ";
  cout << "Count of Negative elements = " << neg_count;
 
  return 0;
}  

输出

Array: -9 7 -5 3 2 
Count of Positive elements =3, Count of Negative elements = 2

时间复杂度:O(n)

辅助空间:O(n)

另一种高效的方法(使用 二分查找 ):

  • 如果数组未排序,则先对数组进行排序。
  • 使用二分搜索在排序数组中获取负数的最后一个索引。
  • 在数组中将索引初始化为最后一个负数的索引 -1 ,因为,如果数组中没有负数,则将返回 -1 作为最后一个负数的索引。
  • 负数的计数将是 “索引 +1”,因为我们使用的是基于0的索引。
  • 正数的计数将是“数组中的总数 – 数组中负数的数量”。
  • 输出最终答案。

下面是上述方法的实现:

// C++实现上述方法
 
#include <bits/stdc++.h>
using namespace std;
 
// 查找排序数组中负数的最后一个索引的函数
int BinarySearch(int *arr, int n)
{  
    int l = 0, r = n-1, index = -1;//最初将索引初始化为-1
    while(l <= r)
    {  
        int mid = (l + r) / 2;
        
        //如果arr[mid]为负数,则我们不会在范围[l,mid-1]中搜索
        //因为负数的最后一个索引在排序数组的范围[mid,r]中。
        if(arr[mid]<0)
        {
            l = mid + 1;
            index=mid;//每次在排序数组中更新最右边的负数索引
        }
        else
          { 
              r = mid - 1;
          }
    }
   
    //返回负数的最后一个索引
    return index;
}
//打印数组元素的函数
void printArray(int *arr,int n)
{
  cout<<"Array: ";
  for(int i = 0; i<n; i++)
  {
    cout<<arr[i]<<" ";
  }
  cout<<endl;
}
 
//主函数
int main()
{  
    int arr[] = {-9,7,-5,3,2 };
    int n = sizeof(arr) / sizeof(arr[0]);
    printArray(arr, n);
   
    // 对数组进行排序,以便进行二分查找
    sort(arr,arr+n);
   
    int neg_count = BinarySearch(arr, n)+1;
    int pos_count = n - neg_count;
   
    // 输出计数
    cout << "Count of Positive elements = "<< pos_count<<", ";
    cout << "Count of Negative elements = " << neg_count<<endl;
     
    return 0;
}
 
// 本代码由nikhilsainiofficial546贡献```  

输出

Array: -9 7 -5 3 2 
Count of Positive elements = 3, Count of Negative elements = 2

时间复杂度: O(n*log 2 n)

辅助空间: O(1)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例