숫자 배열 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 표시
- (A[i]가 k와 같고 my_map[k]> 1) 또는 (A[i]가 k와 같지 않음),
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
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