在 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 的大小
- add := 0
- my_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
- 如果 (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
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP