python進階程式設計_3_最大數,最小數的統計
阿新 • • 發佈:2019-02-19
時間限制:1秒
空間限制:32768K
小Q今天在上廁所時想到了這個問題:有n個數,兩兩組成二元組,差最小的有多少對呢?差最大呢?輸入描述:
輸入包含多組測試資料。 對於每組測試資料: N - 本組測試資料有n個數 a1,a2...an - 需要計算的資料 保證: 1<=N<=100000,0<=ai<=INT_MAX.
輸出描述:
對於每組資料,輸出兩個數,第一個數表示差最小的對數,第二個數表示差最大的對數。
輸入例子1:
6 45 12 45 32 5 6
輸出例子1:
1 2
# -*- coding: utf-8 -*- def f(nums, N): _min, _max = nums[0], nums[-1]# nums最大值和最小值 #極端情況,所有數字都一樣 if _min == _max: return str(N*(N-1)/2) + ' ' + str(N*(N-1)/2) ret_max, ret_min = 0, 0# 返回值引數 #尋找最大差值對數 ret_max = nums.count(_min) * nums.count(_max)# 最大差值對數 #尋找最小差值對數 ,非零的情況,將每出現結果為最小的差值更新,每重複一次值加一 min_dif = float('inf')# 最小差值初始化維正無窮 for i in range(N-1):# 迴圈尋找最小差值對數,ret_min表示最小差值對數 diff = nums[i+1] - nums[i] if diff < min_dif: ret_min = 1 min_dif = diff elif diff == min_dif: ret_min += 1 #上式判斷程式碼只能保證非零差值的統計,一旦差值結果為0, #則必須將每一階段差值為0分開討論而且還要重新組合統計 # 極端情況,存在差值為0,這時需要重新判斷 if min_dif == 0: count = 0 #用於統計當前排列小段中大小相等的元素的個數 ret_min = 0 for i in range(N-1): if nums[i+1] == nums[i]: count += 1 else: if count > 0:# 因為上面count初始值為0,因此實際上count應該再+1 #count=count+1 #ret_min+=count*(count-1)/2 ret_min += count*(count+1)/2#從count個數選出2個 count = 0 #在最後的一小段中 #可能一直是nums[i+1] == nums[i],沒有else,因此還需要在加一個 #如果count=0則不影響最後結果 ret_min += count*(count+1)/2 ret_min=int(ret_min) return str(ret_min) + ' ' + str(ret_max) if __name__ == '__main__': while 1: try: N =int( input() ) nums = list(map(int,input().strip().split()) ) except: break nums.sort() print (f(nums, N) )