-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1218. Longest Arithmetic Subsequence of Given Difference
98 lines (66 loc) · 1.78 KB
/
1218. Longest Arithmetic Subsequence of Given Difference
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
class Solution {
public int longestSubsequence(int[] arr, int difference)
{
// int n = arr.length;
int result = 1;
int[] dp=new int[40001];
for(int i:arr)
{
dp[i+20000]=dp[i - difference + 20000] + 1;
result = Math.max(result, dp[i + 20000]);
}
return result;
/*
int result = 0;
HashMap<Integer, Integer> map = new HashMap<>();
for(int i=0; i<n; i++)
{
result = Math.max(result, map.getOrDefault(arr[i] - difference, 0) + 1);
map.put(arr[i], map.getOrDefault(arr[i] - difference, 0) + 1);
}
return result;
*/
/*
int max = Integer.MIN_VALUE, min = Integer.MAX_VALUE;
for(int num : arr)
{
if(num < min)
{
min = num;
}
if(num > max)
{
max = num;
}
}
int result = 0, expect, seqcount;
int length = max-min + 1;
int[] count = new int[length];
for(int i : arr)
{
seqcount = count[i-min] + 1;
if(seqcount > result)
{
result = seqcount;
}
expect = i + difference - min;
if(expect >-1 && expect < length)
{
count[expect] = seqcount;
}
}
return result;
*/
/*
int result = 1;
HashMap<Integer, Integer> dp = new HashMap<>();
for(int i : arr)
{
int prev = dp.getOrDefault(i-difference, 0);
dp.put(i, prev+1);
result = Math.max(result, dp.get(i));
}
return result;
*/
}
}