Program to find number of arithmetic subsequences from a list of numbers in Python?


Suppose we have a list of numbers called nums, we have to find the number of arithmetic subsequences of length ≥ 3. As we know an arithmetic sequence is a list of numbers where the difference between one number and the next is the same.

So, if the input is like nums = [6, 12, 13, 8, 10, 14], then the output will be 3, as we have subsequences like: [6, 8, 10], [6, 10, 14], [12, 13, 14].

To solve this, we will follow these steps:

  • dp := a new map

  • n := size of nums

  • res := 0

  • for i in range 0 to n, do

    • for j in range 0 to i, do

      • diff := nums[i] - nums[j]

      • prev := dp[(i, diff)] if that is not present, then 0

      • prevprev := dp[(j, diff)] if that is not present, then 0

      • dp[i, diff] := prev + prevprev + 1

      • res := res + prevprev

  • return res

Example

 Live Demo

class Solution:
   def solve(self, nums):
      dp = {}
      n = len(nums)
      res = 0
      for i in range(n):
         for j in range(i):
            diff = nums[i] - nums[j]

            prev = dp.get((i, diff), 0)
            prevprev = dp.get((j, diff), 0)
            dp[(i, diff)] = prev + prevprev + 1

            res += prevprev
      return res

ob = Solution()
nums = [6, 12, 13, 8, 10, 14]
print(ob.solve(nums))

Input

[6, 12, 13, 8, 10, 14]

Output

3

Updated on: 10-Nov-2020

305 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements