文巾解题 1711. 大餐计数
生活随笔
收集整理的這篇文章主要介紹了
文巾解题 1711. 大餐计数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 題目描述
2 解題思路
先設立一個哈希表,來得到不同的美味值分別有幾道菜。然后對冪值和美味值進行遍歷。
import math class Solution(object):def countPairs(self, deliciousness):""":type deliciousness: List[int]:rtype: int"""deliciousness.sort()dit={}for i in deliciousness:if(i in dit):dit[i]+=1else:dit[i]=1 #字典,描述 每個不同的美味程度有幾道不同的菜品n=int(math.log(deliciousness[-1]*2,2)) #這一組菜品中,美味程度最大的兩個之和,也不會超過2的n次方count=0key=dit.keys()key.sort()for i in range(n+1): #遍歷2的冪for j in key: #遍歷一個菜品的美味值(為了防止重復計算,我們規定第一個菜品的美味值一定小于等于第二個菜品)print(j)tmp=2**i-j #tmp表示另一個菜品if(j>tmp):break #如果第一個菜品的美味值比第二個菜品的美味值大,那么說明這一組菜品已經在之前被遍歷過了。elif(j==tmp and dit[j]==1):break #如果這一個菜品正好等于2的冪的一半,但是只有一個,那么是不存在一組的elif(j==tmp and dit[j]>1):count+=(dit[j]-1)*dit[j]//2 #如果這一個菜品正好等于2的冪的一半,但是有多個,那么相當于C(n,2)組美味else:if(tmp not in dit):continue #先看另一個菜品有沒有count+=dit[j]*dit[tmp]return(count % (10**9 + 7))總結
以上是生活随笔為你收集整理的文巾解题 1711. 大餐计数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文巾解题 196. 删除重复的电子邮箱
- 下一篇: 文巾解题 595. 大的国家