Python “暴力”;子阵列乘积小于K“;
我正在尝试使用递归来解决这个问题,获取所有连续的子数组,然后进行检查 您的系统将获得一个正整数数组nums。计数和打印 所有子数组的乘积所在的(连续)子数组数 子阵列中的元素小于k 此时,我编写了这部分代码:Python “暴力”;子阵列乘积小于K“;,python,arrays,recursion,brute-force,Python,Arrays,Recursion,Brute Force,我正在尝试使用递归来解决这个问题,获取所有连续的子数组,然后进行检查 您的系统将获得一个正整数数组nums。计数和打印 所有子数组的乘积所在的(连续)子数组数 子阵列中的元素小于k 此时,我编写了这部分代码: def product_arr(array): counter = 1 for i in range(len(array)): counter *= array[i] return counter def numSubArray(array, k
def product_arr(array):
counter = 1
for i in range(len(array)):
counter *= array[i]
return counter
def numSubArray(array, k):
if len(array) == 0:
return 0
if product_arr(array) <= k:
return 1
res_1 = numSubArray(array[1:], k//array[0])
res_2 = numSubArray(array[:-1], k//array[-1])
return 1 + res_1 + res_2
感谢您的时间:)如果您用简单的英语(或您最熟悉的任何语言)解释您认为的递归关系是什么样子,通常会有所帮助,而且我有理由相信您的递归想法是错误的。你写的是:
None
而不是0
),为什么k
,则子数组的数目为1现在来看数字2。你的
return 1
使得另一行return res1+res2
永远不会被执行。显然这不是你的意图,但它解释了为什么你最终会得到答案2
:在你的例子中,完整的数组不能满足,如果你用简单的英语拼写出来通常会有所帮助(或任何你最熟悉的语言)你认为递归关系是什么样子的,我有理由相信你的递归思想是错误的。你写的是:
在空数组中,没有子数组(但返回None
而不是0
),为什么
如果数组中所有数字的乘积小于k
,则子数组的数目为1
否则,如果我们删除第一项,它是子数组的数量,如果我们删除第二项,它是子数组的数量
这三点都有问题。首先,在1中,您应该返回0而不是“nothing”。空数组没有连续的子数组,因此“0”是正确的答案
现在来看第2行。你的return 1
使得另一行return res1+res2
永远不会执行。显然这不是你的意图,但它解释了为什么你最终得到了答案2
:在你的例子中,完整的数组不能满足谢谢,我更新了我的帖子,但我有一些问题:为什么需要为数组[1:-1]以及为什么为“1+”在最终返回中,更改返回值的方式?再次感谢您的明确解释更新后的代码与我说的不完全一致。return 1
肯定是错误的。当您有res1+res2
时,如果整个数组的乘积是,则添加1。没有办法或至少获得所有的c没有重复的相邻子数组?谢谢,我更新了我的帖子,但我有一些问题:为什么它需要数组[1:-1],为什么“1+”在最终返回中,更改返回值的方式?再次感谢您的明确解释更新后的代码与我说的不完全一致。return 1
肯定是错误的。当您有res1+res2
时,如果整个数组的乘积是,则添加1。没有办法或至少获得所有的c没有重复的相邻子数组?我认为在你的例子中,正确答案是9,顺便说一句:所有4个长度1数组工作。所有3个长度2数组工作。所有2个长度3数组工作。长度4数组不工作。所以4+3+2=9。我想在你的例子中,正确答案是9,顺便说一句:所有4个长度1数组工作。所有3个长度2数组工作。所有2个长度2数组工作。所有2个长度都工作波长为3的阵列工作。长度为4的阵列不工作。因此4+3+2=9。
arr = [10, 5, 2, 6]
print(numSubArray(arr, 100))