在Python中,寻找d的值以最大化数组c[]中零的个数,其中c[i] = d*a[i] + b[i]
假设我们有两个包含n个整数的数组A和B,现在考虑一个数组C,其中第i个数将是d*A[i] + B[i],这里d是任意实数。我们必须找到d,使得数组C中零的个数最大。还要返回零的个数。
因此,如果输入类似于A = [15, 40, 45]和B = [4, 5, 6],则输出将是d = -0.266666,零的个数为1
为了解决这个问题,我们将遵循以下步骤:
n := A的大小
my_map := 一个新的映射
count := 0
对于i从0到n,执行:
如果B[i]不等于0且A[i]不等于0,则:
val := (-1.0 * B[i]) / A[i]
如果my_map中不存在val,则:
my_map[val] := 0
my_map[val] := my_map[val] + 1
否则,当B[i]等于0且A[i]等于0时,则:
count := count + 1
maximum := 0;
对于my_map中的每个项,执行:
maximum := my_map[item]和maximum中的最大值
对于my_map中的每个键值对,执行:
如果值等于最大值,则:
显示键
退出循环
显示maximum + count
示例(Python)
让我们来看下面的实现以更好地理解:
def find_d_zero(A, B) : n = len(A) my_map = {} count = 0 for i in range(n) : if (B[i] != 0 and A[i] != 0) : val = (-1.0 * B[i]) / A[i] if val not in my_map : my_map[val] = 0 my_map[val] += 1 elif (B[i] == 0 and A[i] == 0) : count += 1 maximum = 0; for item in my_map : maximum = max(my_map[item], maximum) for keys, values in my_map.items() : if (values == maximum) : print("d = ", keys) break print("Number of 0s: ", maximum + count) a = [15, 40, 45] b = [4, 5, 6] find_d_zero(a, b)
输入
[15, 40, 45], [4,5,6]
输出
d = -0.26666666666666666 Number of 0s: 1
广告