Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “暴力”;子阵列乘积小于K“;_Python_Arrays_Recursion_Brute Force - Fatal编程技术网

Python “暴力”;子阵列乘积小于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

我正在尝试使用递归来解决这个问题,获取所有连续的子数组,然后进行检查

您的系统将获得一个正整数数组nums。计数和打印 所有子数组的乘积所在的(连续)子数组数 子阵列中的元素小于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
  • 否则,如果我们删除第一项,它是子数组的数量,如果我们删除第二项,它是子数组的数量
  • 这三点都有问题。首先,在1中,您应该返回0而不是“nothing”。空数组没有连续的子数组,因此“0”是正确的答案


    现在来看数字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))