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 的最大長度 那...