在Python中找到给定数组中的所有良好索引

假设我们有一个数字数组A,我们必须找到该数组的所有索引,以便从数组中删除第ith个元素后,该数组将成为一个好的数组。我们必须记住-

  • 好的数组是一个元素等于所有其他元素之和的数组。

  • 基于1的索引将在此处使用。

因此,如果输入类似于[10,4,6,2],那么输出将为[1,4],就像我们删除A [1]时,数组看起来像[4,6,2]一样,很好,因为6 = 4 + 2。如果我们删除A [4],该数组将看起来像[10,4,6],这也很好,因为10 = 4 + 6。

为了解决这个问题,我们将遵循以下步骤-

  • n:= A的大小

  • 加:= 0

  • my_map:=新映射

  • 对于0到n范围内的i,执行

    • my_map [A [i]]:= my_map [A [i]] + 1

    • 加:=加+ A [i]

  • 对于0到n范围内的i,执行

    • k:= k / 2

    • 如果k在my_map中,则

    • 显示我+1

    • 如果(A [i]与k相同,且my_map [k]> 1]或(A [i]与k不相同),则

    • k:=加-A [i]

    • 如果k mod 2与0相同,则

    示例

    让我们看下面的实现以更好地理解-

    from collections import defaultdict
    def find_indices(A):
       n = len(A)
       add = 0
       my_map = defaultdict(lambda:0)
       for i in range(n):
          my_map[A[i]] += 1
          add += A[i]
       for i in range(n):
          k = add - A[i]
          if k % 2 == 0:
             k = k >> 1
             if k in my_map:
                if ((A[i] == k and my_map[k] > 1) or (A[i] != k)):
                   print((i + 1))
    A = [10, 4, 6, 2]
    find_indices(A)

    输入值

    [10, 4, 6, 2]

    输出结果

    1
    4
    猜你喜欢