5214 最長定差子串行

2022-06-13 02:21:10 字數 1106 閱讀 9395

這道題,比較有意思,他們說用c++的map會好些很多,而且節省空間,奈何我不會啊(有興趣的道友,而可自行實現)。

一道遞推的題目,因t為不會c++的map所以我只能用陣列來實現,但是有負數啊,陣列索引不能為負數啊,這可怎麼辦涼涼了。簡單暴力的方法,直接加上最大邊界值,陣列開兩倍大,相當於去掉了符號。這時候我們就可以開出我們的dp陣列了。既然是遞推那麼就得有 遞推公式 。也很簡單, 最長啥啥啥的那不就是步長為 1 一次次累加的關係嗎?而且還要最長,那肯定得要有max函式了。我們設dp[i]表示當前序列最後乙個數是i的最大子串行長度,每一次i++之後我們都與上一次認定的「最長值」進行比較,如果中間斷開,那麼由於上一次的「最長值」 的索引由步長決定,且步長為固定值,所以斷開後會自動重新計數。有這個規律我們可以很輕易的寫出狀態轉移方程:

dp[i]=max(dp[i],dp[i-difference]+1);

當然這僅僅是動態轉移方程,具體實現起來還是需要改動的。大家可以自己先試試如何實現,再來看**。

1/**

2* @brief 最長定差子串行

3* @note 一定要加10000

4* @param arr: 給定序列

5* @param arrsize: 序列長度

6* @param difference: 定固差

7* @author 楊文蓁的小迷弟 8*/

9int longestsubsequence(int* arr, int arrsize, int

difference);

12for (int i = 0; i < arrsize; i++)

1316

17for (int i = 0; i < arrsize; i++)

1824

else

2528 ans = ans > dp[arr[i]] ?ans : dp[arr[i]];

29 printf("

%d\n

", ans);30}

3132

return

ans;

33 }

view code

周賽不易,諸君共勉!

1218 最長定差子串行

給你乙個整數陣列 arr 和乙個整數 difference,請你找出 arr 中所有相鄰元素之間的差等於給定 difference 的等差子串行,並返回其中最長的等差子串行的長度。示例 1 輸入 arr 1,2,3,4 difference 1 輸出 4 解釋 最長的等差子串行是 1,2,3,4 示...

Leetcode 1218 最長定差子串行

給你乙個整數陣列 arr 和乙個整數 difference,請你找出 arr 中所有相鄰元素之間的差等於給定 difference 的等差子串行,並返回其中最長的等差子串行的長度。示例 1 輸入 arr 1,2,3,4 difference 1 輸出 4 解釋 最長的等差子串行是 1,2,3,4 示...

LeetCode 1218 最長定差子串行

給你乙個整數陣列 arr 和乙個整數 difference,請你找出 arr 中所有相鄰元素之間的差等於給定 difference 的等差子串行,並返回其中最長的等差子串行的長度。class solution def longestsubsequence self,arr list int diff...