nums라는 숫자 목록이 있다고 가정합니다. 이제 인덱스 i에서 요소를 삭제한 다음 결과 목록의 짝수 인덱스 값의 합이 홀수 인덱스 값의 합과 동일한지 여부에 따라 true 또는 false를 반환하는 f(i)라는 함수를 고려하십시오. 따라서 f가 true를 반환하는 인덱스 수가 필요합니다.
따라서 입력이 nums =[6, 8, 5, 2, 3]과 같으면 출력은 2가 됩니다. 왜냐하면 8을 제거하면 배열은 [6, 5, 2, 3]이 되고 홀수는 그리고 인덱스 요소의 합도 8이므로 동일합니다. 또 다른 가능한 해결책은 2를 제거하면 배열이 [6, 8, 5, 3]이 되는 것입니다. 여기서 홀수 및 짝수 인덱스 요소의 합은 11이므로 동일합니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- n :=숫자 크기
- a :=2 x (n+1) 차수의 2차원 목록 및 각각을 0으로 채움
- 각 인덱스 i와 값 x num에 대해 다음을 수행합니다.
- a[0, i + 1] :=a[0, i]
- a[1, i + 1] :=a[1, i]
- a[i mod 2, i + 1] :=a[i mod 2, i + 1] + x
- c :=0
- s :=숫자로 표시되는 모든 요소의 합계
- 0 ~ n - 1 범위의 i에 대해
- e :=a[0, i] - a[0, 0] + a[1, n] - a[1, i + 1]
- e * 2가 s - nums[i]와 같으면
- c :=c + 1
- 반환 c
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(nums): n = len(nums) a = [[0] * (n + 1), [0] * (n + 1)] for i, x in enumerate(nums): a[0][i + 1] = a[0][i] a[1][i + 1] = a[1][i] a[i % 2][i + 1] += x c = 0 s = sum(nums) for i in range(n): e = a[0][i] - a[0][0] + a[1][n] - a[1][i + 1] if e * 2 == s - nums[i]: c += 1 return c nums = [6, 8, 5, 2, 3] print(solve(nums))
입력
[6, 8, 5, 2, 3]
출력
2