Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 주어진 배열에서 모든 좋은 인덱스 찾기

<시간/>

숫자 배열 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의 크기
  • 추가:=0
  • my_map :=새 지도
  • 0에서 n 사이의 i에 대해
    • my_map[A[i]] :=my_map[A[i]] + 1
    • 추가 :=추가 + A[i]
  • 0에서 n 사이의 i에 대해
    • k :=추가 - 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