大餐 是指 恰好包含兩道不同餐品 的一餐,其美味程度之和等於 2 的冪。你可以搭配 任意 兩道餐品做一頓大餐。
給你乙個整數陣列 deliciousness ,其中 deliciousness[i] 是第 i
道餐品的美味程度,返回你可以用陣列中的餐品做出的不同 大餐 的數量。結果需要對 109 + 7 取餘。
注意,只要餐品下標不同,就可以認為是不同的餐品,即便它們的美味程度相同。
示例 1:兩數相加為 2 的整數次冪,emmm,管你那麼多呢?這不就是乙個二數和的問題嗎?輸入:deliciousness = [1,3,5,7,9] 輸出:4 解釋:大餐的美味程度組合為 (1,3) 、(1,7) 、(3,5)
和 (7,9) 。 它們各自的美味程度之和分別為 4 、8 、8 和 16 ,都是 2 的冪。 示例 2:
輸入:deliciousness = [1,1,1,3,3,3,7] 輸出:15 解釋:大餐的美味程度組合為 3 種 (1,1) ,9 種
(1,3) ,和 3 種 (1,7) 。
但是這裡的和不止乙個,題目給出的注意是0 <= deliciousness[i] <= 220,也就意味著我們的和最小為20,最大為2^21。
對於每乙個deliciousness[i],需要求出對應的 22 個另一半,[2^0, 2^1, 2^2, 23,…,221] - deliciousness[i]
class
solution
:def
countpairs
(self, deliciousness: list[
int])-
>
int:
target = collections.defaultdict(
int)
res =
0for deliciou in deliciousness:
if deliciou in target:
res =
(res+target[deliciou])%
(10**9
+7)
tmp =
1for i in
range(22
):if tmp - deliciou >=0:
target[tmp-deliciou]+=1
tmp *=
2return res
兩數之和問題 運用map
題目描述 給乙個整數陣列,找到兩個數使得他們的和等於乙個給定的數 target。你需要實現的函式twosum需要返回這兩個數的下標,並且第乙個下標小於第二個下標。注意這裡下標的範圍是 1 到 n,不是以0開頭。解題思路 使用map鍵值對 樣例 給出 numbers 2,7,11,15 target ...
MMX和SSE的運用
intel的mmx技術是對intel體系結構 ia 指令集的擴充套件。該技術使用了單指令多資料技術 simd 技術,以並行方式處理多個資料元素。mmx指令集增加了57條新的操作碼和乙個新的64位四字資料型別,增加了八個新的64位mmx暫存器,每個暫存器可按名稱mm0 mm7直接訪問。這意味著我們可以...
Map的運用和小結
在實際開發和應用中,漸漸發現map的一些常用操作和小技巧,今天記錄一下。1.map遍歷 map遍歷有幾種形式,可以根據key進行遍歷,可以根據value進行遍歷,可以直接遍歷整個map,以及迭代遍歷等等。1.1根據key進行遍歷 keyset 獲取key public void testkeyset...