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
  • 相关阅读:
    一个群发站内信的设计
    javascript typeof 小结
    setInterval,setTimeout的用法
    C#中常见异常类
    输入框关闭自动完成功能
    【转】javascript判断一个元素是否数组
    jquery的动态统计输入字符数方法
    giedview绑定数据格式化字符串
    jQuery 1.4单独为某个动画动作设效果
    GridView行编辑中找DropDownList控件
  • 原文地址:https://www.cnblogs.com/seyjs/p/10765630.html
Copyright © 2011-2022 走看看