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
广告