騰訊 有趣數字
阿新 • • 發佈:2019-01-14
題目描述
小Q今天在上廁所時想到了這個問題:有n個數,兩兩組成二元組,差的絕對值最小的有多少對呢?差的絕對值最大的呢?
這麼無聊,上廁所想出這麼變態的題目。。。。。。。
解題思路
採用暴力的解法
- 首先對陣列進行排序
- 那麼相差最大組的數目就是最大值的個數乘以最小值得個數
- 遍歷陣列一次,找出相差最小的值
- 再遍歷一次陣列,如果兩個值的差等於這個值,那麼相差最小的對數加一
需要注意的是:例如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