leetcode 1218 最長定差子串行

2021-10-23 03:22:48 字數 1327 閱讀 4361

題目描述:給你乙個整數陣列 arr 和乙個整數 difference,請你找出 arr 中所有相鄰元素之間的差等於給定 difference 的等差子串行,並返回其中最長的等差子串行的長度。

解題步驟

解法1:採用最長遞增子串行類似的方法。(存在計算超時問題)

1、 狀態定義:dp[i]表示陣列nums[0…i]的最長遞增子串行

2、 狀態轉移方程:如果dp[i]-dp[j]==difference 則dp[i] = max(dp[i],dp[j]+1)

3、 初始化:dp[i]全為1

4、 輸出:dp[i]的最大值

**

public

intlongestsubsequence1

(int

arr,

int difference)

} ret = math.

max(ret, dp[i]);

}return ret;

}

解法2:重新定義狀態

1、 狀態定義:dp[i]表示以陣列中數字為i結尾的最長遞增序列,注意:這裡的i不是索引而是數值

2、 狀態轉移方程

由於dp陣列長度為2萬,所以需要先判斷減去定差difference之後是否在陣列範圍內,如果在範圍內,狀態轉移方程修改為

dp[i+

10000

]= dp[i+

10000

-differance]

+1

反之:

dp[i+

10000]=

1

3、 初始化:初始設定所有dp為0

4、 輸出:dp[i+10000]的最大值

**

public

intlongestsubsequence2

(int

arr,

int difference)

else

dp[arr[i]

+10000]=

1;}return maxlen;

}

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...

1218 最長定差子串行

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