题目:
解析:
1.状态表示:
2.状态转移方程:
该题痛点:
3.初始化:
把dp表全部初始化为2
4.填表顺序:
5.返回值:返回dp表里的最大值
代码:
public int longestArithSeqLength(int[] nums) {int n = nums.length;int[][] dp = new int[n][n]; for(int i = 0; i < n; i++)Arrays.fill(dp[i],2);Map<Integer,Integer> hash = new HashMap<>();hash.put(nums[0],0);//注意:哈希表第一个位置要提前放进去int ret = 2;for(int i = 1; i < n; i++){ //固定倒数第二个数for(int j = i+1; j < n; j++){ int a = 2*nums[i]-nums[j];if(hash.containsKey(a))dp[i][j] = dp[hash.get(a)][i]+1; ret = Math.max(ret,dp[i][j]);}//优化:一边找填dp表,一边找离i位置最近的k下标放到哈希表中hash.put(nums[i],i);}return ret;}