在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
广告
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP