C++代码:统计除以某个数后大于数组大小一半的数字个数


假设我们有一个包含n个元素的数组A。我们必须找到一个非零整数d,使得在数组中的每个数字都除以d之后,数组中出现的正数值的数量大于或等于数组大小的一半。如果有多个d值满足条件,则返回其中任何一个。

因此,如果输入类似于A = [10, 0, -7, 2, 6],则输出将为4,因为这里n = 5,所以我们需要至少$\mathrm{\left \lceil 5/2\right \rceil=3}$个除法后的正数元素。如果d = 4,则除法后的数组将为[2.5, 0, −1.75, 0.5, 1.5],其中有3个正数:2.5、0.5和1.5。

步骤

为了解决这个问题,我们将遵循以下步骤:

z := 0, f := 0
n := size of A
for initialize i := 0, when i < n, update (increase i by 1), do:
   a := A[i]
   if a > 0, then:
      (increase z by 1)
   if a < 0, then:
      (increase f by 1)
if 2 * z >= n, then:
      return 1
otherwise when 2 * f >= n, then:
   return -1
Otherwise
   return 0

示例

让我们来看下面的实现,以便更好地理解:

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A){
   int z = 0, f = 0;
   int n = A.size();
   for (int i = 0; i < n; i++){
      int a = A[i];
      if (a > 0)
         z++;
      if (a < 0)
         f++;
   }
   if (2 * z >= n)
      return 1;
   else if (2 * f >= n)
      return -1;
   else
      return 0;
}
int main(){
   vector<int> A = { 10, 0, -7, 2, 6 };
   cout << solve(A) << endl;
}

输入

{ 10, 0, -7, 2, 6 }

输出

1

更新于:2022年3月29日

浏览量:112

开启您的职业生涯

完成课程获得认证

开始学习
广告