在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

更新于:2020年8月25日

188 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告