題意:由於這些數字不一定要連續,所以先對所有數字排序,便於後續比較大小和選取遞增的序列。給定n (1≤n≤100) 個數,從中找出盡可能多的數使得他們能夠組成乙個最長的等差數列。輸出該最長等差數列的長度。
注意:當n=1時,構成長度為1的等差數列。
用以下幾個變數維護乙個等差數列:
值得注意的是:
#coding=utf-8
if __name__ == '__main__':
kase = int(input())
for t in xrange(kase):
n = int(input())
num =
for i in xrange(n):
a = int(input())
num.sort() #陣列排序
if num[0] == num[n-1]: #最小值和最大值相等
print
"case #%d:"%t
print n
continue
max_len = 2
#記錄最大長度
for i in xrange(n): #首項
for j in xrange(i+1, n): #第二項確定公差
pre = j
tmp_len = 2
delta = num[j] - num[i] #新的公差
for k in xrange(j+1, n):
if (num[k] - num[pre]) == delta: #發現新的一項
tmp_len += 1
pre = k #維護pre
if num[k] - num[pre] > delta: #之後都不存在
break
max_len = max(tmp_len, max_len) #更新最大長度
print
"case #%d:"%t
print max_len
最長等差數列 找數字 及最長等差數列分析
今日面試題 找數字 陣列a中,除了某乙個數字x之外,其他數字都出現了三次,而x出現了一次。請給出最快的方法,找到x。最長等差數列分析 原題給定未排序的陣列,請給出方法找到最長的等差數列。分析題目描述比較簡單,但是有乙個問題我們需要首先搞清楚 等差數列中的數字,是否要和原始陣列中的順序一致。題目中,並...
最長等差數列 最長等差數列 及子串行分析
今日面試題 最長等差數列 給定未排序的陣列,請給出方法找到最長的等差數列。子串行分析 原題給定長度為n的整數數列 a0,a1,an 1,以及整數s。這個數列會有連續的子串行的整數總和大於s的,求這些數列中,最小的長度。分析如果只是像題目這樣的描述,沒有強調正數,可以採用o n 2 的方法。但是,很多...
求最長等差數列
給定未排序的陣列,請給出方法找到最長的等差數列。分析題目描述比較簡單,但是有乙個問題我們需要首先搞清楚 等差數列中的數字,是否要和原始陣列中的順序一致。題目中,並沒有說明,這個就需要大家在面試的過程中和面試官進行交流。我們在這裡對兩種情況都進行討論 保證數字的順序 等差數列是要求相鄰兩個元素之間的差...