【Java每日一题,动态规划】最长定差子序列

简介: 【Java每日一题,动态规划】最长定差子序列

Introduction

给你一个整数数组 arr 和一个整数 difference,请你找出并返回 arr 中最长等差子序列的长度,该子序列中相邻元素之间的差等于 difference。


Input

第一行给出整数个数n,第二行给出n个排列整数,第三行间隔


Output

对每一组输入,在一行中输出最长等差子序列的长


Sample

input

5
1 2 3 4 5
1

output

5

Solution

import java.util.HashMap;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        int n=s.nextInt();
        int[] arr=new int[n];
        for(int i=0;i<n;i++){
            arr[i]=s.nextInt();
        }
        int k=s.nextInt();
        int ans=0;
        HashMap<Integer,Integer> map=new HashMap();
        for(int i=0;i<n;i++){
            int num=map.getOrDefault(arr[i]-k,0);
            map.put(arr[i],num+1);
            ans=Math.max(num+1,ans);
        }
        System.out.println(ans);
    }
}

Experience

dp也能用map来实现

相关文章
|
19天前
|
Java
0-1背包问题(Java详解)(动态规划)至少与恰好
0-1背包问题(Java详解)(动态规划)至少与恰好
26 1
|
19天前
|
存储 Java 数据处理
|
19天前
|
算法 Java
[Java·算法·简单] LeetCode 392. 判断子序列 详细解读
[Java·算法·简单] LeetCode 392. 判断子序列 详细解读
44 0
|
9月前
|
Java
【Java每日一题,动态规划,零钱兑换模板题】硬币组合数量
【Java每日一题,动态规划,零钱兑换模板题】硬币组合数量
|
19天前
|
Java
Java栈的压入、弹出序列(详解)
Java栈的压入、弹出序列(详解)
35 0
|
19天前
|
Java Go C++
Golang每日一练(leetDay0112) 2、3、4的幂
Golang每日一练(leetDay0112) 2、3、4的幂
34 0
Golang每日一练(leetDay0112) 2、3、4的幂
|
19天前
|
Java Go C++
Golang每日一练(leetDay0085) 2的幂、数字 1 的个数
Golang每日一练(leetDay0085) 2的幂、数字 1 的个数
27 0
Golang每日一练(leetDay0085) 2的幂、数字 1 的个数
|
19天前
|
算法 Java C++
Java每日一练(20230424) 二叉树中序遍历、交换链表节点、不同子序列
Java每日一练(20230424) 二叉树中序遍历、交换链表节点、不同子序列
41 0
Java每日一练(20230424) 二叉树中序遍历、交换链表节点、不同子序列
|
19天前
|
Java Go C++
Java每日一练(20230420) 罗马数字转整数、电话号码的字母组合、排列序列
Java每日一练(20230420) 罗马数字转整数、电话号码的字母组合、排列序列
27 0
Java每日一练(20230420) 罗马数字转整数、电话号码的字母组合、排列序列
|
19天前
|
Java
leetcode 516. 最长回文子序列(JAVA)题解
leetcode 516. 最长回文子序列(JAVA)题解
28 0