在数组c []中查找d以最大化零个数,该数组在Python中创建为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:=新映射
计数:=0
对于0到n范围内的i,执行
数:=数+1
值:=(-1.0*B[i])/A[i]
如果val不在my_map中,则
my_map[val]:=my_map[val]+1
my_map[val]:=0
如果B[i]不等于0且A[i]不等于0,则
否则,当B[i]等于0且A[i]等于0时,则
最大:=0;
对于my_map中的每个项目,执行
最大:=my_map[item]的最大值,最大值
对于每个键,my_map中的值,执行
显示键
从循环中出来
如果值与最大值相同,则
显示最大数量
范例(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