【LeetCode】1218. 最長定差子序列

在這裏插入圖片描述

解法:

動態規劃解題。我遍歷數組,遍歷到某個元素x,我想知道以它爲結尾的等差子數列的最大長度是多少。那我需要知道這個元素x之前的 以(x-difference)結尾的等差子數列的最大長度,然後再加一就行了。這就是動態規劃的思想。然後我找到最長的長度就行了。

代碼如下:

public int longestSubsequence(int[] arr, int difference) {
    // 動態規劃解題
    int res = 1;
    HashMap<Integer, Integer> hashMap = new HashMap<>();
    for (int num : arr) {
        if (hashMap.containsKey(num - difference)) {
            int tmp = hashMap.get(num - difference) + 1;
            if (tmp > res) res = tmp;
            hashMap.put(num, tmp);
        } else {
            hashMap.put(num, 1);
        }
    }
    return res;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章