当前位置: 首页 > news >正文

宁海县做企业网站最新国际新闻头条新闻

宁海县做企业网站,最新国际新闻头条新闻,seo 网站结构调整,承德优化网站建设LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划 文章目录 LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划前言一、题目概述二、解题方法2.1 一维表格的自底向上动态规划2.1.1 思路讲解2.1.2 伪代码 + 逐…

LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划


文章目录

  • LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划
  • 前言
  • 一、题目概述
  • 二、解题方法
    • 2.1 一维表格的自底向上动态规划
      • 2.1.1 思路讲解
      • 2.1.2 伪代码 + 逐步输出示例
      • 2.1.3 Python代码如下
      • 2.1.4 C++代码如下
    • 2.2 二维表格的自底向上动态规划
      • 2.2.1 思路讲解
      • 2.2.2 伪代码 + 逐步输出示例
      • 2.2.3 Python代码如下
      • 2.2.4 C++代码如下
    • 2.3 方法对比
  • 三、英语词汇


前言

LeetCode位置:416. 分割等和子集

日常刷题,维持手感,同步学习英语,刷题顺序参考B站UP@justyyuk的系列视频,感兴趣的点波关注。
学海无涯,大路千万,感恩此程,彼此真诚陪伴!
在这里插入图片描述
Ps:第一次刷到的道友留步,这里拉齐一下信息。文章主要记录视频中的主要内容,算法思路会按照个人理解,用伪代码+举例每步输出的方式呈现。代码部分会以Python和C++语法进行呈现。文章最后会总结一些英语词汇。OK,就啰嗦这么多,开始进步[干杯🐱‍👓]


一、题目概述

Day3

输入:nums列表
输出:bool值,表示原始列表是否存在和相等的两个子列表

PS:

  1. 子序列 (Subsequence/Subset):

    • 子序列是通过从原始序列中删除一些或不删除任何元素且不改变剩余元素顺序而得到的序列。
    • 例子:对于序列 [1, 2, 3, 4],[1, 3, 4] 和 [2, 4] 是子序列。
    • 注意:[1, 4, 3] 不是 子序列,因为顺序改变了。
  2. 子列表 (Sublist)

    • 子列表是列表的连续部分,意味着元素必须是连续的。
    • 例子:对于列表 [1, 2, 3, 4],[2, 3] 和 [1, 2, 3]是子列表。
    • 注意:[1, 3] 不是 子列表,因为它不是连续的。
  3. 子数组 (Subarray):

    • 类似于子列表,子数组是数组的连续部分。
    • 例子:对于数组 [1, 2, 3, 4],[2, 3] 和 [1, 2, 3] 是子数组。
    • 注意:[1, 3] 不是 子数组,因为它不是连续的。
  • 在许多情况下,当数据结构是数组或列表时,“子列表”和“子数组”可以互换使用,但“子数组”一词专门用于数组。

二、解题方法

2.1 一维表格的自底向上动态规划

2.1.1 思路讲解

动态规划策略 :
本题与昨天的是同一道题,不过这次采用自底向上(表格法)的动态规划策略。此处有两种方法,一种使用到一维表格,一种使用二维表格。

  • 一维表格:用表格长度表示待达成目标,即数组和的一半(+1),表格内的值(True/False)表示子序列是否选择当前元素

    • 表格长度:表格 dp 的长度为 half + 1,其中 half 是数组总和的一半。这意味着我们试图判断是否存在一个子集,使其和为 0 到 half 之间的任何值。
    • 表格的值:dp[i] 是一个布尔值,表示是否存在一个子集,其和等于 i。
    • 初始化:dp[0] 被初始化为 True,因为和为 0 的子集总是存在的(空集)。其他位置被初始化为 False。
    • 状态转移:
    • 对于数组中的每一个元素 num,从后向前遍历 dp 数组(从 half 到 num),更新 dp 数组的值。
    • 更新规则为:dp[i] = dp[i] or dp[i - num]。这意味着如果存在一个子集和为 i - num,那么加上 num 后,和为 i 的子集也存在。

具体步骤:

  1. 计算总和:total = sum(nums),如果 total 是奇数,返回 False。
  2. 计算目标子集和:half = total // 2。
  3. 初始化 dp 数组:dp = [False for _ in range(half + 1)],并设 dp[0] = True。
  4. 遍历 nums 更新 dp 数组:
    • 对每个 j(来自 nums),从 half 到 j 更新 dp。
    • 如果 j <= i,则 dp[i] = dp[i] or dp[i - j]。
  5. 返回 dp[half],表示是否存在一个子集其和为 half。

2.1.2 伪代码 + 逐步输出示例

# 伪代码示例
函数 canPartition(nums):total = nums 的和如果 total 是奇数:返回 Falsehalf = total // 2dp = 长度为 half + 1 的布尔数组,所有元素初始化为 Falsedp[0] = True对于 nums 中的每一个 num:从 half 到 num 遍历 i:如果 dp[i - num] 为 True:dp[i] = True返回 dp[half]# 逐步输出示例:
输入:[1, 2, 1]
初始化
•	total = 1 + 2 + 1 = 4
•	half = 4 // 2 = 2
•	dp = [True, False, False](长度为 half + 1)
处理第一个元素 1
•	遍历 i 从 21(倒序)o	i = 2: dp[2] = dp[2] or dp[1] -> False or False = Falseo	i = 1: dp[1] = dp[1] or dp[0] -> False or True = True
•	更新后的 dp: [True, True, False]
处理第二个元素 2
•	遍历 i 从 22(倒序)o	i = 2: dp[2] = dp[2] or dp[0] -> False or True = True
•	更新后的 dp: [True, True, True]
处理第三个元素 1
•	遍历 i 从 21(倒序)o	i = 2: dp[2] = dp[2] or dp[1] -> True or True = Trueo	i = 1: dp[1] = dp[1] or dp[0] -> True or True = True
•	更新后的 dp: [True, True, True]
最终结果
•	返回 dp[half]
http://www.tj-hxxt.cn/news/62623.html

相关文章:

  • 舟山公司网站制作惠州seo外包费用
  • 自己的网站怎么赚钱网址提交百度
  • 南昌网站优化方案做网站推广一般多少钱
  • 中企动力网站建设方案企业qq官方下载
  • 北京网站设计实力乐云践新关键词林俊杰在线听免费
  • 做网站对服务器要求网站 软件
  • 上海技术公司做网站企业软文
  • 网站建设灰色关键词今日热搜榜排名
  • 网站建设的优势邯郸网站优化公司
  • 网站公安备案怎么备案宁波seo排名优化价格
  • 网站备案资料 下载我国的网络营销公司
  • 丝网外贸做哪些网站河南seo技术教程
  • 信息查询类网站是怎么做的营销推广的特点是
  • 汕头网站开发福建企业seo推广
  • 网站用户投稿怎么做搜索引擎技术
  • 自己的网站怎么做关键词优化网站seo百度百科
  • 东莞电商网站公司苹果cms永久免费建站程序
  • 上海做网站hlanggroup购物网站网页设计
  • 网站防复制重庆seo网络推广优化
  • 如何做好网站seo长沙网站定制
  • 网站icp备案信息是什么北京百度网站排名优化
  • 益阳网站开发企业网站推广方案设计毕业设计
  • 安阳网站建设哪家公司好软文代写发布
  • 做网站的技术smat徐州seo代理计费
  • 长安网站建设价格营销推广是什么意思
  • 做红酒的网站有哪些网络营销知识点
  • 百度 网站添加百度搜索推广产品
  • 邢台网站推广多少钱深圳网络营销模式
  • 创造一个网站上海关键词排名软件
  • 工程网站开发我要推广网