93 長度大於 3的最長的等差數列

2021-06-26 14:15:15 字數 1079 閱讀 6003

94.微軟筆試題

求隨機數構成的陣列中找到長度大於=3  的最長的等差數列,  輸出等差數列由小到大:

如果沒有符合條件的就輸出

格式:輸入[1,3,0,5,-1,6]

輸出[-1,1,3,5]

要求時間複雜度,空間複雜度盡量小

/*94.微軟筆試題

求隨機數構成的陣列中找到長度大於=3的最長的等差數列, 輸出等差數列由小到大:

如果沒有符合條件的就輸出

格式:輸入[1,3,0,5,-1,6]

輸出[-1,1,3,5]

要求時間複雜度,空間複雜度盡量小

解法如下:

1.排序

2.設極值分別為min, max,那麼公差範圍為(1..max-min);

3.公差d從(1..max-min)迴圈,求出每次的最長的數列長度f(d)

所以該題目基礎是求出乙個有序陣列中公差為d的最長等差數列。

較簡單動態規劃:

設等差數列的起始下標為s,當前下標為i,從s到i,構成的最長的等差數列長度為f(s,i),

有f(s,i+1) = f(s,i) +1 ( input[i+1] == input[s] + f(s,i)*d)

f(s,i) ( input[i+1] != input[s] + f(s,i)*d)

最長的數列長度為:

maxlen = max

*/ #include#include#include#include#define max 1000

using namespace std;

void getseq(int *input,int size)

;

maxlen=0;

maxs=-1;

maxd=1;

d=input[size-1]-input[0];//公差

for(j=1;j<=d;j++)

}else if(input[i]>input[start]+dp[i-1]*j)

break;

}} }

printf("%d ",input[maxs]);

for(i=maxs+1,j=1;j

最長等差數列 找數字 及最長等差數列分析

今日面試題 找數字 陣列a中,除了某乙個數字x之外,其他數字都出現了三次,而x出現了一次。請給出最快的方法,找到x。最長等差數列分析 原題給定未排序的陣列,請給出方法找到最長的等差數列。分析題目描述比較簡單,但是有乙個問題我們需要首先搞清楚 等差數列中的數字,是否要和原始陣列中的順序一致。題目中,並...

最長等差數列 最長等差數列 及子串行分析

今日面試題 最長等差數列 給定未排序的陣列,請給出方法找到最長的等差數列。子串行分析 原題給定長度為n的整數數列 a0,a1,an 1,以及整數s。這個數列會有連續的子串行的整數總和大於s的,求這些數列中,最小的長度。分析如果只是像題目這樣的描述,沒有強調正數,可以採用o n 2 的方法。但是,很多...

尋找最長的等差數列

問題描述 給定乙個大小為n的陣列,要求寫出乙個演算法,求出其最長的等差數列的子串行。首先問題並沒有要求要按照原來陣列的順序,所以可以先對該陣列排序。如果不要求該最長子序列中的元素是相鄰的話,可以用乙個簡單的dp來完成。令 f i j 表示以 i 為結尾的某子串行 該子串行的等差為 j 的最大長度 那...