美文网首页
[LeetCode] 413. Arithmetic Slice

[LeetCode] 413. Arithmetic Slice

作者: TurtleLin | 来源:发表于2018-07-20 22:02 被阅读0次

    413. Arithmetic Slices

    A sequence of number is called arithmetic if it consists of at least three elements and if the difference between any two consecutive elements is the same.

    For example, these are arithmetic sequence:

    1, 3, 5, 7, 9
    7, 7, 7, 7
    3, -1, -5, -9
    

    即等差数列。

    问题:
    找出数组A中等差数列的个数,A不一定是等差数列。

    Example:

    A = [1, 2, 3, 4]
    
    return: 3, for 3 arithmetic slices in A: [1, 2, 3], [2, 3, 4] and [1, 2, 3, 4] itself.
    

    思路:

    1. 长度为n的数组A为等差数列,在数组后面增加一个数,若数组最后一个数的两倍等于数组倒数第二个数加新数,则新数与数组A组成一个新的等差数列。
    2. 长度为n的数组A不是等差数列,则在数组面增加新数组成的新数组不可能是等差数列

    Solution

    class Solution:
        def numberOfArithmeticSlices(self, A):
            """
            :type A: List[int]
            :rtype: int
            """
            n = len(A)
            count = 0
            available = list(range(1, n))
    
            while True:
                new_available = []
                for i in available:
                    if i < n - 1 and A[i + 1] + A[i - 1] == 2 * A[i]:
                        new_available.append(i+1)
                        count += 1
                available = new_available
                if len(available) == 0:
                    break
            return count
    

    相关文章

      网友评论

          本文标题:[LeetCode] 413. Arithmetic Slice

          本文链接:https://www.haomeiwen.com/subject/rsccmftx.html