最长等差数列问题 Golang 暴力法
这个代码可能不简洁,但是绝对简单易懂。
首先将序列nums排个序,然后取第一个first元素f,再取第二个second元素s,算出差d,那么我们的下一个期望值就是nums[s]+d,遍历剩余的数组,碰到了期望就计数+1,期望值+d,继续遍历。
目前只想到了这样朴素的方法,如果你想到了什么奇技淫巧,不妨评论一下吧。
package main
import (
"fmt"
"sort"
)
func main() {
var n,tp int
var nums []int
fmt.Scan(&n)
for i:=0;i<n;i++{
fmt.Scan(&tp)
nums= append(nums, tp)
}
if n<=2{
fmt.Println(n)
return
}
sort.Ints(nums)
max:=0
for f:=0;f<n;f++{
for s:=f+1;s<n;s++{
cnt:=2
d:=nums[s]-nums[f]
exp:=nums[s]+d
for k:=s+1;k<n;k++{
if nums[k]==exp{
cnt++
exp+=d
}
}
if cnt>max{
max=cnt
}
}
}
fmt.Println(max)
}