C++程序 统计数组中的正数和负数
给出大小为N的整数数组 arr ,我们的任务是在数组中找到正数和负数的数量。
示例:
输入: arr[] = [-9,7,-5,3,2]
输出: 正数个数=3,负数个数=2
输入: arr[] = [5,4,-2,-1,-7]
输出: 正数个数=2,负数个数=3
方法:
- 逐个遍历数组中的元素。
- 使用条件元素 >=0 来查找元素的正负。 如果满足条件,则增加 p_count 值。
- 从所有元素的总数中减去 p_count 以获取数组中负数的数量。
- 打印正数和负数的数量。
示例:
输出:
时间复杂度: O(n)
辅助空间: O(1)
方法2: 递归
输出:
时间复杂度: O(n)
辅助空间: O(n)
另一种方法:使用C ++标准模板库(STL)和 ‘count_if()’函数:
输出
时间复杂度:O(n)
辅助空间:O(n)
另一种高效的方法(使用 二分查找 ):
- 如果数组未排序,则先对数组进行排序。
- 使用二分搜索在排序数组中获取负数的最后一个索引。
- 在数组中将索引初始化为最后一个负数的索引 -1 ,因为,如果数组中没有负数,则将返回 -1 作为最后一个负数的索引。
- 负数的计数将是 “索引 +1”,因为我们使用的是基于0的索引。
- 正数的计数将是“数组中的总数 – 数组中负数的数量”。
- 输出最终答案。
下面是上述方法的实现:
输出
时间复杂度: O(n*log 2 n)
辅助空间: O(1)