【发布时间】:2019-08-15 06:04:24
【问题描述】:
问题名称 : 413. 算术切片
问题陈述 :
如果一个数列至少由三个元素组成,并且任意两个连续元素之间的差值相同,则称为算术序列。
例如,这些是等差数列:
1、3、5、7、9
7、7、7、7
3、-1、-5、-9
下面的序列不是算术的。
1、1、2、5、7
给出了一个由 N 个数字组成的零索引数组 A。该数组的切片是任意一对整数 (P, Q),满足 0
数组 A 的切片 (P, Q) 称为算术如果序列: A[P], A[p + 1], ..., A[Q - 1], A[Q] 是算术的。特别是,这意味着 P + 1
该函数应返回数组 A 中的算术切片数。
链接:https://leetcode.com/problems/arithmetic-slices/
我试图找出解决上述问题的递归算法。我试图实现算法,该算法基本上采用数组的一部分并递归地解决问题,直到数组大小达到长度 == 3。在长度 == 3 时,我们检查数组是否是算术的,并基于此返回 1 或 0 .
我的解决方案:
def isArithmatic(array):
if (array[1] - array[0]) == (array[2] - array[1]):
return True
return False
def arithmaticSlices(array):
if len(array) == 3:
if isArithmatic(array):
return 1
return 0
else:
return arithmaticSlices(array[1:]) + arithmaticSlices(array[:len(array)-1])
我的问题:代码返回的答案小于原始答案。请帮忙。
【问题讨论】:
-
解决方案是错误的,因为它不计算任何长度超过 3 的算术切片。
-
感谢 GZ0 的回复。我们该如何处理这种情况?
-
自己想不通的可以在网站上找到各种解决方案。
-
是的,我可以,但是我已经实现了这个解决方案,我想在这个特定的算法上获得帮助,这样我就可以确保在我们研究未来的解决方案时可以改进某些事情。
-
实际上,您的解决方案不仅忽略了一些算术切片,还计算了一些切片两次,因为
array[1:]和array[:-1]有很大的重叠。如果没有一些根本性的改变,我看不到快速解决方案。
标签: python recursion dynamic-programming