zoukankan      html  css  js  c++  java
  • 【leetcode】1027. 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 1:

    Input: [3,6,9,12]
    Output: 4
    Explanation: 
    The whole array is an arithmetic sequence with steps of length = 3.
    

    Example 2:

    Input: [9,4,7,2,10]
    Output: 3
    Explanation: 
    The longest arithmetic subsequence is [4,7,10].
    

    Example 3:

    Input: [20,1,15,3,10,5,8]
    Output: 4
    Explanation: 
    The longest arithmetic subsequence is [20,15,10,5].
    

    Note:

    1. 2 <= A.length <= 2000
    2. 0 <= A[i] <= 10000

    解题思路:首先用字典记录A中每个元素出现的下标,接下来求出任意A[i]与A[j]的差值d,依次判断A[j] += d是否存在于A中,并且要求A[j] + d的下标的最小值要大于j,最终即可求出最长的等差数列。

    代码如下:

    class Solution(object):
        def longestArithSeqLength(self, A):
            """
            :type A: List[int]
            :rtype: int
            """
            import bisect
            res = 0
            dic = {}
            for i,v in enumerate(A):
                dic[v] = dic.setdefault(v,[]) + [i]
            for i in range(len(A)):
                for j in range(i+1,len(A)):
                    count = 2
                    diff = A[j] - A[i]
                    next = A[j] + diff
                    smallestInx = j
                    while True:
                        if next not in dic:
                            break
                        inx = bisect.bisect_right(dic[next],smallestInx)
                        if inx == len(dic[next]):
                            break
                        smallestInx = dic[next][inx]
                        next = next + diff
                        count += 1
                    res = max(res,count)
            return res
  • 相关阅读:
    SpringMVC+Spring+Mybatis框架集成
    Mybatis学习总结(三)——SqlMapConfig.xml全局配置文件解析
    Mybatis学习总结(二)——Mapper代理开发
    Mybatis学习总结(一)——入门基础
    Mybatis学习总结(九)——查询缓存
    Mybatis学习总结(八)——延迟加载
    1016 部分A+B (15分)
    1015 德才论 (25分)*
    1014 福尔摩斯的约会 (20分)
    1013 数素数 (20分)
  • 原文地址:https://www.cnblogs.com/seyjs/p/10765630.html
Copyright © 2011-2022 走看看