在数组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