b374. [福州19中]众数
https://zerojudge.tw/ShowProblem?problemid=b374
解題思路-Python-給我自己的筆記
執行效率較高31,解法二
參考「oxxostudio (oxxo.studio)」解法,https://zerojudge.tw/ShowThread?postid=28907&reply=0
1。先匯入函式庫。from collections import Counter
2。輸入n(接下來會有幾個數字)
3。將輸入的數字轉成一維list,d。(d=list(map(int,input().split( ))))
4。計算d的內容次數後,轉成字典型態存入a。(a=Counter(d))
5。取出a字典中所有的value值。(b=a.values( ))
6。利用max(b)找出出現次數最大的。
7。利用迴圈跑字典
如果字典中value值和最大值相等時,把key存入答案list中。
8。排序答案
9。最後用迴圈印出答案
----------------------------------------------------------------
原本自己的想法解題,執行效率較低2.2s,但也可以AC,無字典解題狀態,解法一
1。輸入n。
2。輸入的數值存入(d)(list型態中)
3。排序d
4。跑while,當d不是空的的時候 (打算把值存到二維陣列s中,存號碼和次數)
取出d最前面的值(d[0])
把d[0]出現的次數和d[0]這兩個值存到(s)list中
然後一一移除(d)list中,d[0]的值
5。找出(s)list中最大的值(出現次數最多的)
6。跑迴圈,跑s的長度
一一判斷,如果出現的次數和最大值相同,就記下來
from collections
import Counter #匯入函式庫
n=int(input())
d=list(map(int,input().split()))
#輸入後轉一維list
a=Counter(d) #計算次數後轉字典型態
b=a.values() #取出所有value
m=max(b) #找出value中最大的
s=[] #放答案用
for key in a: #迴圈跑字典
if a[key]==m: #符合key的value值和最大值相等時
s.append(key) #存到答案list中
s.sort() #答案小到大排序
for i in s: #再印出
print(i,m)
'''-------解法一:有AC,但可再優化一下花太多時間了------
n=input()
s=[]
ans=''
d=list(map(int,input().split()))
d.sort()
while d!=[]:
t=d[0]
s.append([d.count(t),t])
while t in d:
d.remove(t)
mt=max(s)
m=mt[0] #最多的次數
for i in
range(len(s)):
if s[i][0]==m:
ans=ans+str(s[i][1])+'
'+str(s[i][0])+'\n'
print(ans)
'''