Longest Arithmetic Sequence
Given an array A of integers, return the length of the longest arithmetic subsequence in A.
Recall that a subsequence of A is a list A[i_1], A[i_2], …, A[i_k] with 0 <= i_1 < i_2 < … < i_k <= A.length - 1, and that a sequence B is arithmetic if B[i+1] - B[i] are all the same value (for 0 <= i < B.length - 1).
Example
Input: [9,4,7,2,10]
Output: 3
Explanation:
The longest arithmetic subsequence is [4,7,10].
Solution
func longestArithSeqLength(A []int) int {
lenth := len(A)
index := [10001][]int{}
for i:=0;i<lenth;i++ {
index[A[i]] = append(index[A[i]], i)
}
var dfs func(int, int)int
dfs = func(j, diff int)int{
next:= A[j]+diff
if next<0 || next>10000 {
return 0
}
for _, k:= range index[next]{
if j<k {
return 1+dfs(k, diff)
}
}
return 0
}
ret := 0
for i:=0;i<lenth;i++{
for j:=i+1;j<lenth;j++{
diff := A[j]-A[i]
ret = max(ret, 2+dfs(j, diff))
}
}
return ret
}
func max(a, b int)int {
if a>b {
return a
}
return b
}