在 Python 中查找给定数组中的所有好索引\

server side programmingprogrammingpython

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

  • 好数组是元素等于所有其他元素之和的数组。
  • 这里将使用基于 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 的大小
  • add := 0
  • my_map := a new map
  • 对于范围从 0 到 n 的 i,执行
    • my_map[A[i]] := my_map[A[i]] + 1
    • add := add + A[i]
  • 对于范围从 0 到 n 的 i,执行
    • k := add - A[i]
    • 如果 k mod 2 与 0 相同,则
      • k := k/2
      • 如果 k 在 my_map 中,则
        • 如果 (A[i] 与 k 相同且 my_map[k] > 1) 或 (A[i] 与 k 不同),则
          • 显示 i + 1

示例

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

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

相关文章