1. 程式人生 > >騰訊 有趣數字

騰訊 有趣數字

題目描述
小Q今天在上廁所時想到了這個問題:有n個數,兩兩組成二元組,差的絕對值最小的有多少對呢?差的絕對值最大的呢?
這麼無聊,上廁所想出這麼變態的題目。。。。。。。
在這裡插入圖片描述


解題思路

採用暴力的解法

  1. 首先對陣列進行排序
  2. 那麼相差最大組的數目就是最大值的個數乘以最小值得個數
  3. 遍歷陣列一次,找出相差最小的值
  4. 再遍歷一次陣列,如果兩個值的差等於這個值,那麼相差最小的對數加一

需要注意的是:例如3 3 3 2 2,相差為0的元組數目有4對而不是3對


通過程式碼

import sys
def TowTuple(n, a):
    a.
sort() minA, maxA = 1, 1 for i in range(1, n): if a[i] == a[0]: minA += 1 else: break for i in range(n - 2, - 1, -1): if a[i] == a[n - 1]: maxA += 1 else: break ans2 = minA * maxA minDiffer = 1000000 ans1 =
0 for i in range(1, n): #找出最小差值 differ = a[i] - a[i - 1] if differ < minDiffer: minDiffer = differ for i in range(0, n): for j in range(i + 1, n): if a[j] - a[i] == minDiffer: ans1 += 1 elif a[j] - a[i] > minDiffer:
#超時的舉措,將後面的全部掐掉 break return ans1, ans2 try: while True: line1 = sys.stdin.readline().strip() line2 = sys.stdin.readline().strip() if line1 == '': break n = int(line1) a = list(map(int, line2.split())) ans1, ans2 = TowTuple(n, a) print(ans1, ans2) except: pass