Leetcode 最長等差數列 dp

2021-09-28 00:18:44 字數 943 閱讀 7728

n個不同的正整數,找出由這些數組成的最長的等差數列。

例如:1 3 5 6 8 9 10 12 13 14

等差子數列包括(僅包括兩項的不列舉)

1 3 5

1 5 9 13

3 6 9 12

3 8 13

5 9 13

6 8 10 12 14

其中6 8 10 12 14最長,長度為5。

因為沒看清題目意思糾結了好久,題目說的是找出由這些數組成的最長的等差數列,而不需要這些數字的排列順序和輸入的一樣,這樣我們就可以排序之後在來考慮。因為之前一直覺得題意是等差數列的順序應該和輸入的數字的順序一樣。。。。。。

因為題目所給的陣列的範圍是10000,所以我們可以考慮n^2的演算法來寫。

剛開始想了好久不知道dp應該怎麼弄,最後突然想到可以用dp[i][j]其中的i,j代表的是ap最前面的兩個元素,並且i我們可以想到,不管i,j的位置是什麼,dp[i][j]最小值為2,我們可以先初始化。

然後我們先固定j,向兩邊擴充套件i=j-1,k=j+1。當2*a[j]==a[i]+a[k]的時候,說明a[i],a[j],a[k]可以組成ap,這時候dp[i][j] = dp[j][k]+1 .

具體看**

#include #include #include #include #include using namespace std ;

int const maxn = 10005;

int a[maxn];

short int dp[maxn][maxn];

//dp[i][j]表示的是以i和j為前兩個元素的ap最長值,i= 1 ; j--)

else if(a[i]+a[k]>2*a[j])

else}}

printf("%d\n",ans);

}return 0 ;

}

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

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

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

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

求最長等差數列

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