用 Python 编写程序,查找具有恒定差值的最长算术子序列的长度

pythonserver side programmingprogramming更新于 2026/1/23 9:16:17

假设我们有一个数字列表 nums 和另一个值 diff,我们必须找到最长算术子序列的长度,其中子序列中任何连续数字之间的差值与 diff 相同。

因此,如果输入为 nums = [-1, 1, 4, 7, 2, 10] diff = 3,则输出将为 4,因为我们可以选择像 [1, 4, 7, 10] 这样的子序列。

为了解决这个问题,我们将遵循以下步骤 −

  • seen := 一个空字典,当不存在键时默认值为 0
  • mx := 0
  • 对于 nums 中的每个 x,执行
    • 如果 x - diff 在 seen 中,则
      • seen[x] := seen[x - diff] + 1
    • 否则,
      • seen[x] := 1
    • mx := mx 和 seen[x] 中的最大值
  • 返回 mx

示例

让我们看看下面的实现以便更好地理解 −

from collections import defaultdict
def solve(nums, diff):
   seen = defaultdict(int)
   mx = 0
   for x in nums:
      if x - diff in seen:
         seen[x] = seen[x - diff] + 1
      else:
         seen[x] = 1
      mx = max(mx, seen[x])
   return mx

nums = [-1, 1, 4, 7, 2, 10]
diff = 3
print(solve(nums, diff))

输入

[-1, 1, 4, 7, 2, 10], 3

输出

4

相关文章


有用资源