Leetcode 3566. Partition Array into Two Equal Product Subsets

  • [Leetcode 3566. Partition Array into Two Equal Product Subsets](#Leetcode 3566. Partition Array into Two Equal Product Subsets)
    • [1. 解题思路](#1. 解题思路)
    • [2. 代码实现](#2. 代码实现)

1. 解题思路

这一题我的实现还是比较暴力的,首先显而易见的,若要满足题目要求,则给出的数组的所有元素的乘积必然是target的平方,因此,我们可以快速由此判断该数组是否可分。

然后,在满足上述条件的前提下,我们就是要找到若干个元素使之乘积恰好为target,这个的话我们可以通过一个动态规划进行实现。

2. 代码实现

给出python代码实现如下:

python 复制代码
class Solution:
    def checkEqualPartitions(self, nums: List[int], target: int) -> bool:
        prod = 1
        for num in nums:
            prod *= num
        if prod != target * target:
            return False

        n = len(nums)
        @lru_cache(None)
        def dp(idx, tgt):
            if tgt == 1:
                return True
            if idx >= n:
                return False
            if tgt % nums[idx] == 0:
                return dp(idx+1, tgt) or dp(idx+1, tgt // nums[idx])
            else:
                return dp(idx+1, tgt)

        return dp(0, target)

提交代码评测得到:耗时7ms,占用内存18.5MB。

相关推荐
十八岁讨厌编程3 小时前
【算法训练营Day27】动态规划part3
算法·动态规划
Excuse_lighttime1 天前
除自身以外数组的乘积
java·数据结构·算法·leetcode·eclipse·动态规划
我爱工作&工作love我3 天前
2024-CSP-J T3 小木棍
算法·动态规划
种自己的花呀3 天前
LeetCode 53 最大子数字和(动态规划)
算法·leetcode·动态规划
微笑尅乐4 天前
力扣350.两个数组的交集II
java·算法·leetcode·动态规划
十八岁讨厌编程5 天前
【算法训练营Day26】动态规划part2
算法·动态规划
mmz12075 天前
动态规划 练习(c++)
c++·算法·动态规划
Keying,,,,5 天前
力扣hot100 | 多维动态规划 | 62. 不同路径、64. 最小路径和、5. 最长回文子串、1143. 最长公共子序列、72. 编辑距离
算法·leetcode·动态规划
阳光明媚sunny6 天前
爬楼梯算法java实现
算法·动态规划
青云交6 天前
Java 大视界 -- Java 大数据在智能公交调度优化与准点率提升中的应用实践(416)
java·动态规划·flink cep·spark mllib·智能公交调度·杭州公交案例·准点率提升