EOJ 3239 最長的等差數列(排序 列舉)

2021-08-08 02:12:14 字數 1032 閱讀 9755

題意:

給定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 的方法。但是,很多...

求最長等差數列

給定未排序的陣列,請給出方法找到最長的等差數列。分析題目描述比較簡單,但是有乙個問題我們需要首先搞清楚 等差數列中的數字,是否要和原始陣列中的順序一致。題目中,並沒有說明,這個就需要大家在面試的過程中和面試官進行交流。我們在這裡對兩種情況都進行討論 保證數字的順序 等差數列是要求相鄰兩個元素之間的差...