Python陣列中計數優質對的程式
假設我們有一個名為nums的陣列,其中包含非負值。如果答案過大,我們需要找到陣列中存在的優質索引對的數量,則返回答案模10^9+7。這裡,當一對索引(i, j)滿足所有這些條件時,則被稱為優質對:1. 0 <= i < j < nums的大小 2. nums[i] + rev(nums[j]) 等於 nums[j] + rev(nums[i])
注意 − 這裡rev()只反轉整數的正數部分,所以如果存在rev(564),則表示465,但如果存在rev(540),則返回45。
因此,如果輸入類似於nums = [97,2,42,11],則輸出將為2,因為存在兩個對(0,2)和(1,3),對於第一個[97 + rev(42) = 97+24 = 121,以及42 + rev(97) = 42 + 79 = 121],對於第二個[2 + rev(11) = 2 + 11 = 13以及11 + rev(2) = 13]。
為了解決這個問題,我們將遵循以下步驟:
m := (10^9) + 7
dic := 一個空的對映,其預設值為0
對於nums中的每個num,執行:
rev := num的反轉
將dic[num - rev]增加1
res := 0
對於dic所有值的列表中的每個val,執行:
res := res + (val*(val-1))/2 的商
返回res mod m
示例
讓我們看看下面的實現,以便更好地理解:
from collections import defaultdict def solve(nums): m = (10**9)+7 dic = defaultdict(int) for num in nums: rev=int(str(num)[::-1]) dic[num-rev]+=1 res=0 for val in dic.values(): res += (val*(val-1)) // 2 return res % m nums = [97,2,42,11] print(solve(nums))
輸入
[97,2,42,11]
輸出
2
廣告