2024年5月24日 星期五

【ZEROJUDGE】 b374. [福州19中]众数

 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。將輸入的數字轉成一維listd。(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]這兩個值存到(slist

  然後一一移除(dlist中,d[0]的值 

5。找出(slist中最大的值(出現次數最多的) 

6。跑迴圈,跑s的長度

  一一判斷,如果出現的次數和最大值相同,就記下來

 7。顯示答案

 ----------------------

程式碼參考 

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:  #符合keyvalue值和最大值相等時

        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)

'''