二數和的運用

2021-10-13 20:35:40 字數 1277 閱讀 9010

大餐 是指 恰好包含兩道不同餐品 的一餐,其美味程度之和等於 2 的冪。

你可以搭配 任意 兩道餐品做一頓大餐。

給你乙個整數陣列 deliciousness ,其中 deliciousness[i] 是第 i​​​​​​​​​​​​​​

道餐品的美味程度,返回你可以用陣列中的餐品做出的不同 大餐 的數量。結果需要對 109 + 7 取餘。

注意,只要餐品下標不同,就可以認為是不同的餐品,即便它們的美味程度相同。

示例 1:

輸入: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) 。

兩數相加為 2 的整數次冪,emmm,管你那麼多呢?這不就是乙個二數和的問題嗎?

但是這裡的和不止乙個,題目給出的注意是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...