和为target问题汇总

文章目录

  • 习题

  • 和为target的问题,可以有很多种问题的形式的考察,当然,及时的总结与回顾有利于我们熟练掌握这些知识!

习题

377.组合总和 IV

377.组合总和 IV


  • 思路分析:通过观察,由于nums数组里面的元素可以重复选择,并且没有数量限制,所以这个题目就是一个有len(nums)个选择的爬楼梯问题,所以我们就是使用爬楼梯问题模版进行解决
  • 总体的时间复杂度是o(n*target)
python 复制代码
class Solution:
    def combinationSum4(self, nums: List[int], target: int) -> int:
        # 动态规划的问题,nums[i]中为你每一步可以选择的步伐大小
        # 定义dp[i]表示到达i的方案数,那么就可以由先前的位置转移而来
        dp = [1]+[0]*target
        for i in range(1,target+1):
            cou = 0
            for j in nums:
                if i - j >= 0:
                    cou += dp[i-j]
            dp[i] = cou
        return dp[target]

494.目标和

494.目标和


  • 思路分析:
  • 这是一个子序列和为target的问题,需要定义dp[i][j]为前i个数字中,对应和为j的方案数,所以我们需要使用一个二重循环进行求解
  • 当然这题就是需要转换一下
python 复制代码
class Solution:
    def findTargetSumWays(self, nums: List[int], target: int) -> int:
        # 类似于0-1背包问题,求解的是运算结果等于target的表达式的数目
        # 我们可以照常选择正数zheng,那么对应的负数就是sum(nums) - zheng
        # dp[i][j] 定义为前i个数字中,值为j的数目
        # dp[i][j] = dp[i-1][j-nums[i]] + dp[i-1][j+nums[i]] ,计算nums[i]=0也没关系,+,-0算两个表达式
        # 那么dp数组怎么开这个target,原本的困惑,就是选了正数还要管这个target的范围
        # 由式子,选取正数的和为p,要减去的数字和为q,有p+q=s,p-q = target,就可以求解出p与q的值即可
        # 我们只要开的空间等于其中一个即可,也可以去一个绝对值都算上
        s = sum(nums) - abs(target)
        if s<0 or s%2 == 1:
            return 0
        m = s // 2
        n = len(nums)
        dp = [[0]*(m+1) for _ in range(n+1)]
        # 赋初值为1,不然后面算不了
        dp[0][0] = 1
        for i in range(n):
            for j in range(m+1):
                if j < nums[i]:
                    dp[i+1][j] = dp[i][j]
                else:
                    # dp[i][j] = dp[i-1][j] + dp[i-1][j-nums[i]]
                    dp[i+1][j] = dp[i][j] + dp[i][j-nums[i]]
        return dp[n][m]
相关推荐
zzxdear3 小时前
用 OR-Tools CP-SAT 求解最简单的柔性作业车间调度(FJSP)
算法
luj_17683 小时前
变频技术核心原理揭秘
服务器·c语言·开发语言·经验分享·算法
rannn_1113 小时前
【力扣hot100】图论专题+模板|DFS、BFS、拓扑排序...
java·算法·leetcode·深度优先·图论
_Narcissus_3 小时前
B树概念及操作笔记(含完整代码实现)
c语言·数据结构·数据库·c++·笔记·b树·算法
l1258653 小时前
# RAG多轮对话检索设计:Query重写如何让“那它呢“变成完整问题
前端·数据库·人工智能·python·算法·fastapi·milvus
疯狂打码的少年3 小时前
【数据结构】图的应用:最短路径(Dijkstra / Floyd)
数据结构·笔记·算法
linux-hzh3 小时前
百日算法修炼 · Day 13
算法
如此这般英俊3 小时前
手搓Claude Code-第十三章 background_tasks
前端·人工智能·chrome·python·算法·语言模型·自然语言处理
Fa_Mian_Tuan3 小时前
图论基础 | 邻接多重表原理剖析 + 完整可运行C语言代码(插边/删边/释放)
c语言·数据结构·笔记·算法·图论
学习星球4 小时前
【LeetCode算法题精讲】二分查找精讲
java·数据结构·算法·leetcode·职场和发展·图搜索