1. 程式人生 > >python演算法題-ccf 出現次數最多的數 python基礎解答

python演算法題-ccf 出現次數最多的數 python基礎解答

問題描述

試題編號: 201312-1
試題名稱: 出現次數最多的數
時間限制: 1.0s
記憶體限制: 256.0MB
問題描述:

問題描述

  給定n個正整數,找出它們中出現次數最多的數。如果這樣的數有多個,請輸出其中最小的一個。

輸入格式

  輸入的第一行只有一個正整數n(1 ≤ n ≤ 1000),表示數字的個數。
  輸入的第二行有n個整數s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相鄰的數用空格分隔。

輸出格式

  輸出這n個次數中出現次數最多的數。如果這樣的數有多個,輸出其中最小的一個。

樣例輸入

6
10 1 10 20 30 20

樣例輸出

10

實現程式碼(初學時寫的,濃重的java習慣):

number_of_numbers = int(input())
temp = input()
number_list = [int(n) for n in temp.split()]
times_list = []
for i in range(0, number_of_numbers):
    time =0
    for j in range(0, number_of_numbers):
        if number_list[i] == number_list[j]:
            time += 1
    times_list.append(time)


maxTime = 0

for i in range(0, number_of_numbers):
    if times_list[i] > maxTime:
        maxTime = times_list[i]

flag=[]
for i in range(0,number_of_numbers):
    if times_list[i] == maxTime:
        flag.append(i)

if flag.__sizeof__() <= 1:
    print(number_list[flag[0]])
else:
    finalFlag = flag[0]
    for item in flag:
        if number_list[item] < number_list[finalFlag]:
            finalFlag = item
    print(number_list[finalFlag])

修改版(主要是語法精簡):

n = int(input())
number_list = list(map(int, input().split()))
# 找尋每個數出現多少次
times_list = []
for item in number_list:
    time = 0
    for item2 in number_list:
        if item == item2:
            time += 1
    times_list.append(time)

# 找到最大次數
maxTime = 0
for item in times_list:
    if item > maxTime:
        maxTime = item
# 找到是最大次數值的下標,從而因為次數列表和數字列表對應,就找到了那個數字
flag = []
for item in times_list:
    if item == maxTime:
        flag.append(times_list.index(item))

if len(flag) <= 1:
    print(number_list[flag[0]])
else:
    # 出現多個最大次數
    finalFlag = flag[0]
    for item in flag:
        if number_list[item] < number_list[finalFlag]:
            finalFlag = item
    print(number_list[finalFlag])