1218. 最长定差子序列

原题链接:

1218. 最长定差子序列

https://leetcode.cn/problems/longest-arithmetic-subsequence-of-given-difference/description/

完成情况:

在这里插入图片描述

解题思路:

这段代码是一个用Java编写的函数,函数名为longestSubsequence,接受一个整型数组arr和一个整数difference作为参数。函数的功能是找出并返回数组arr中最长等差子序列的长度。

在函数中,首先声明了一个整型变量result并初始化为0,然后创建了一个HashMap对象dp_longestSubsequence用于存储每个元素对应的最长等差子序列长度。

接下来是一个for循环,遍历数组arr中的每个元素arr_i。在循环内部,使用dp_longestSubsequence.getOrDefault(arr_i - difference, 0) + 1的方式计算当前元素arr_i对应的最长等差子序列长度,并将结果存入dp_longestSubsequence中。然后通过Math.max方法更新result为当前最大的子序列长度。

最后,返回计算得到的最长等差子序列的长度result

请注意,这段代码实现的主要思想是动态规划,通过遍历数组来计算每个元素对应的最长等差子序列长度,并使用HashMap来存储中间结果,以减少重复计算。

参考代码:

_1218最长定差子序列

package leetcode板块;

import java.util.HashMap;
import java.util.Map;

public class _1218最长定差子序列 {
    /**
     *
     * @param arr
     * @param difference    一个整数 difference,给定了差值
     * @return
     */
    public int longestSubsequence(int[] arr, int difference) {
//        1 <= arr.length <= 10^5
//        -10^4 <= arr[i], difference <= 10^4
        //  请你找出并返回 arr 中最长等差子序列的长度
        int result = 0;
        Map<Integer, Integer> dp_longestSubsequence = new HashMap<Integer, Integer>();
        //已经指定了数组的差,你需要按这个差去看看有无能够与之匹配的元素即可
        for (int arr_i : arr){
            dp_longestSubsequence.put(arr_i,dp_longestSubsequence.getOrDefault(arr_i - difference,0) + 1);
            result = Math.max(result, dp_longestSubsequence.get(arr_i));
        }
        return result;
    }
}

错误经验吸取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值