【題目描述】 給乙個包含 n個整數元素的集合 個整數元素的集合 a,乙個包含 m個整數元素的集合 b。
定義 magic操作為,從乙個集合中取出元素放到另里且過後每的平均值都大於操作前。
注意以下兩點:
①不可以把乙個集合的元素取空,這樣就沒有平均值了
②值為 x的元素從集合 b取出放入集合a,但集合 a中已經有值為 x的元素,則 a的平均值不變(因為集 合元素不會重複), b的平均值可能會改變(因為 x被取出了)
問最多可以進行少次 magic操作
輸入:3 5
1 2 5
2 3 4 5 6
輸出:2
題目整體不難,記錄一下幾個細節點:
1.題目涉及轉移元素,因為轉移後被轉的平均數要變大,而轉入相同的數不會替換原來的元素,也不會改變原本的平均值,所以這裡存放資料的時候都用的是集合,即set. set裡的元素就像字典的key值,不存在重複。集合用set()構建。因為涉及後續比較,格式要轉為float。
2.用到了乙個python中的無窮大作為比較。寫法:float('inf')。
自己的**如下:
class magic:
def findmin(self, biggerset, smallerset, meana, meanb):
min_val = float('inf')
if not biggerset:
return -1
for element in biggerset:
if min_val > element and element < meana and element > meanb and element not in smallerset:
min_val = element
if min_val == float('inf'):
return -1
return min_val
def swap(self, a, b):
return [b, a]
def mean(self, seta):
return sum(seta)/len(seta)
if __name__ == '__main__':
[n, m] = list(map(int, input().split(' ')))
seta = set(map(float, input().split(' '))) # 用set確定其不能重複
setb = set(map(float, input().split(' ')))
m = magic()
meana = m.mean(seta)
meanb = m.mean(setb)
if meana < meanb: # 確保是seta的平均比setb大
temp = set()
temp = seta
seta = setb
setb = temp
[meana, meanb] = m.swap(meana, meanb)
step = 0
min_val = m.findmin(seta, setb, meana, meanb)
while(min_val != -1):
seta.remove(min_val)
meana = m.mean(seta)
setb.add(min_val)
meanb = m.mean(setb)
step += 1
min_val = m.findmin(seta, setb, meana, meanb)
print(step)
位元組跳動mysql面試 位元組跳動 Golang面試
應朋友之邀,今天下午去位元組送了顆人頭,最後不負眾望,被面試官攆出來了 一面mysql索引快的原理 回答這個問題需要先看一下資料庫的儲存結構 頁結構頁和頁之間的關係 頁和頁之間的關係 有個知識,之前不知道的 聚集索引 以主鍵建立的索引,葉子節點儲存的是表中的資料 非聚集索引 非主鍵建立的索引,葉子節...
位元組跳動 Misc betgame
我太難了 棧溢位都還沒學會去做堆題,硬剛了幾個小時,算了,先回來把這題的wp寫了 一道misc題簽到題,相當於猜拳遊戲 剛開始做的時候還卡了我挺長時間,準備暴力跑的話,理論上最多要試3 30次。然而試了幾次發現,每次進入遊戲,第乙個只要輸和它給的一樣的,都是win。這說明這題其實不是隨機的,然後多試...
位元組跳動面試
不經歷大廠的歷練,你永遠不知道自己有多low,也不知道自己幹啥要去投位元組跳動,可能是要去受下打擊。首先是自我介紹,然後問專案亮點 可憐我憋不出來亮點 然後就是基礎問題 送命題 1 hashmap的結構知道吧,敘述一下 2 hashmap如果有衝突怎麼辦 3 hashmap鍊錶過長怎麼辦 4 has...