最长等差数列Java
文章发布较早,内容可能过时,阅读注意甄别。
# 题目
给你一个整数数组 nums,返回 nums 中最长等差子序列的长度。
回想一下,nums 的子序列是一个列表 nums[i1], nums[i2], ..., nums[ik] ,且 0 <= i1 < i2 < ... < ik <= nums.length - 1。并且如果 seq[i+1] - seq[i]( 0 <= i < seq.length - 1) 的值都相同,那么序列 seq 是等差的。
示例 1:
输入:nums = [3,6,9,12]
输出:4
解释:
整个数组是公差为 3 的等差数列。
示例 2:
输入:nums = [9,4,7,2,10]
输出:3
解释:
最长的等差子序列是 [4,7,10]。
示例 3:
输入:nums = [20,1,15,3,10,5,8]
输出:4
解释:
最长的等差子序列是 [20,15,10,5]。
提示:
- 2 <= nums.length <= 1000
- 0 <= nums[i] <= 500
# 思路
暴力枚举
# 解法
class Solution {
public int longestArithSeqLength(int[] nums) {
//暴力枚举 每两个的值
int len=nums.length;int max=2;int max1=2;
for(int i=0;i<len;i++){
for(int j=i+1;j<len;j++){
int k=nums[i]-nums[j];int left=nums[j];
for(int x=j+1;x<len;x++){
if(left==nums[x]+k){
max++;
left=nums[x];
if(max>max1)max1=max;
}
}
max=2;
}
}
return max1;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 总结
- 分析出几种情况,然后分别对各个情况实现