【代码随想录训练营】【Day 45】【动态规划-5】| Leetcode 1049, 494, 474

【代码随想录训练营】【Day 45】【动态规划-5】| Leetcode 1049, 494, 474

需强化知识点

题目

1049. 最后一块石头的重量 II

  • 代码随想录思路:尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了
  • 为什么两两单个相撞可以等效于两个group相撞:先分成两个数值相近的group,每个group里的元素分别相撞,就等效于两组group都同时减去一个小的值,这样分别减下去就会把较小的元素都消掉,每个group就只剩一个元素了,这样不就“归”成了两个group相撞了吗? 结论:持续进行两两单个相撞【最终】会导致两两group相撞
class Solution:def lastStoneWeightII(self, stones: List[int]) -> int:target = sum(stones) // 2# dp[j]表示容量(这里说容量更形象,其实就是重量)为j的背包,最多可以背最大重量为dp[j]。dp = [0] * (target+1)for i in range(len(stones)):for j in range(target, stones[i]-1, -1):dp[j] = max(dp[j], dp[j-stones[i]] + stones[i])return abs(dp[target] - (sum(stones)- dp[target]))

494. 目标和

  • 注意 提前终止条件 以及 dp_target 的推导
    • left - right = target,left - (sum-left) = target
class Solution:def findTargetSumWays(self, nums: List[int], target: int) -> int:dp_target = (sum(nums) + target) // 2# dp[j] 表示:填满j(包括j)这么大容积的包,有dp[j]种方法# 因为从 dp[0] 开始累加,所以初始值应为1if (sum(nums) + target) % 2 or abs(target) > sum(nums):return 0dp = [0] * (dp_target + 1)dp[0] = 1for num in nums:for i in range(dp_target, num-1, -1):dp[i] += dp[i - num]return dp[dp_target]

474. 一和零

  • 代码随想录思路:dp[i][j]:最多有i个0和j个1的strs的最大子集的大小为dp[i][j]。
class Solution:def findMaxForm(self, strs: List[str], m: int, n: int) -> int:dp = [[0] * (n+1) for _ in range(m+1)]for num in strs:zero_num, one_num = 0, 0for c in num:if c == "0":zero_num += 1else:one_num += 1for i in range(m, zero_num-1, -1):for j in range(n, one_num-1, -1):dp[i][j] = max(dp[i][j], dp[i-zero_num][j-one_num]+1)return dp[m][n]         

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pdf压缩到指定大小的简单方法

压缩PDF文件是许多人在日常工作和学习中经常需要面对的问题。PDF文件因其跨平台、易阅读的特性而广受欢迎,但有时候文件体积过大,会给传输和存储带来不便。因此,学会如何有效地压缩PDF文件,就显得尤为重要。本文将详细介绍几种常见…

课时151:项目发布_基础知识_技术要点

1.1.3 技术要点 学习目标 这一节,我们从 解压缩、传输、备份、小结 三个方面来学习 解压缩 简介 文件的压缩压缩格式:tar zcvf 压缩后的文件名 将要压缩的文件 文件的解压解压格式:tar xf 压缩后的文件名 查看压缩文件内容查看格式&…

Linux跨发行版软件包管理工具:AppImage、Snap和Flatpak

Linux跨发行版软件包管理工具:AppImage、Snap和Flatpak Linux操作系统以其灵活性和强大的社区支持而闻名。随着Linux在各个领域的应用日益广泛,跨发行版的软件包管理工具应运而生,它们提供了一种简便的方法来安装、运行和管理应用程序&#…

liteflow使用注意事项

背景 最近项目使用到了liteflow这个组件的编排框架,官方地址为https://liteflow.cc/pages/fd5984/#%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95,简单的使用场景我就不介绍了。本文只是记录下使用过程中的一些注意事项 liteflow使用注意事项 1.liteflow不同…

视频、图片、音频资源抓取(支持视频号),免安装,可批量,双端可用!

今天分享一款比较好用资源嗅探软件,这个嗅探工具可以下载视频号,界面干净,可以内容预览和批量下载,看到这里你是不是想用它爬很多不得了的东西。这款软件无需安装,打开即用。同时他支持windows系统和Mac系统,是一款不可…

跃入AI新纪元:亚马逊云科技LLM全景培训,解锁AI构建者之路

亲爱的技术爱好者们,你是否也对大语言模型(LLM)的神奇魅力所吸引,渴望深入探索其背后的技术奥秘?今天,我要为大家推荐一份超级硬核的学习资源——亚马逊云科技 对话AI 构建者:从基础到应用的LLM…

【Vue】图形验证码功能

说明: 图形验证码,本质就是一个请求回来的图片用户将来输入图形验证码,用于强制人机交互,可以抵御机器自动化攻击 (例如:避免批量请求获取短信) 需求: 动态将请求回来的 base64 图片,解析渲染…

1、深度学习-安装

开放环境安装 sudo apt install build-essential 环境安装 conda wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh conda init 重新连接shell 组件安装 pip install jupyter d2l torch torchvision 代码 git clone https://github.com/d2l-ai…

stm32MP135裸机编程:启动流程分析

0 参考资料 轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序.pdf STM32MP135AD数据手册.pdf1 stm32MP135裸机启动流程分析 1.1 启动方式 stm32MP135支持8种启动方式: 注: UART和USB启动并不是指通过UART/USB加载程序,而是通过UA…

【文末附gpt升级秘笈】AI热潮降温与AGI场景普及的局限性

AI热潮降温与AGI场景普及的局限性 摘要: 随着人工智能(AI)技术的迅猛发展,AI热一度席卷全球,引发了广泛的关注和讨论。然而,近期一些学者和行业专家对AI的发展前景提出了质疑,认为AI热潮将逐渐…

1.VMware软件的安装与虚拟机的创建

1. VMware软件的安装 1.1 为什么需要虚拟机 嵌入式Linux开发需要在Linux系统下运行,我们选择Ubuntu。   1、双系统安装     有问题,一次只能使用一个系统。Ubuntu基本只做编译用。双系统安装不能同时运行Windows和Linux。   2、虚拟机软件   …

Qt设置进程环境变量

目的 最近遇上了设置环境变量的问题,看似是小问题,想解决好,实在是一件不容易的事。 看看当时,我遇到这些问题的无奈: 首先说,是在windows进行环境变量的设置,如果在Linux那肯定是简单了。 一般来说,首先是设置系统的环境变量,这条路,是一条复杂的路,首先得写一个…

时间处理基础:Rust 的 chrono 库教程

在开发过程中,我们经常有对时间和日期处理的需求。不论是日历应用、日程安排、还是时间戳记录,准确的时间数据处理都是必不可少的。Rust 社区提供的 chrono 库以其强大的功能和灵活的接口,在 Rust 开发者中广受欢迎。本文将简单介绍 chrono 库…

C++ | Leetcode C++题解之第143题重排链表

题目: 题解: class Solution { public:void reorderList(ListNode* head) {if (head nullptr) {return;}ListNode* mid middleNode(head);ListNode* l1 head;ListNode* l2 mid->next;mid->next nullptr;l2 reverseList(l2);mergeList(l1, l…

腾讯云大数据ES Serverless

Elasticsearch:日志和搜索场景首选解决方案。 技术特点:分布式、全文搜索和数据分析引擎,可以对海量数据进行准实时地存储、搜索和统计分析。 ES的技术栈一共包含四个组件: 其中最核心的是Elasticsearch,可用于数据…

Django学习(2)项目实战

1、环境及简介 前端开发:HTML、CSS、JavaScript 后端开发:Java、PHP、Python、GO 数据库:MySQL、MSSQL、Oracle、Redis 安装Django pip install Django 或 下载.whl后 pip install D:\xxx.whl 创建Django项目 File--New Projec…

stm32MP135裸机编程:修改官方GPIO例程在DDR中点亮第一颗LED灯

0 参考资料 轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序.pdf 正点原子stm32mp135开发板&原理图 STM32Cube_FW_MP13_V1.1.0 STM32CubeIDE v1.151 需要修改那些地方 1.1 修改LED引脚 本例使用开发板的PI3引脚链接的LED作为我们点亮的第一颗LED灯,…

在idea中创建Scala项目教程

1.下载Scala支持插件 文件-设置-插件-marketplace 搜索Scala 下载 2.创建项目 文件-新建-项目-新项目-构建系统maven 3.创建Scala目录 Scr-main(右键)-新建-目录(Scala回车键)-scala(右键)-将项目标记为-源代码根目录 4.对当前项目引入Scala支持 未添…

Tdengine的时序数据库简介、单机部署、操作语句及java应用

Tdengine的时序数据库简介、单机部署、操作语句及java应用 本文介绍了Tdengine的功能特点、应用场景、超级表和子表等概念,讲述了Tdengine2.6.0.34的单机部署,并介绍了taos数据库的常见使用方法及特色窗口查询方法,最后介绍了在java中的应用。…

【差分数组】1674. 使数组互补的最少操作次数

本文涉及知识点 差分数组 LeetCode1674. 使数组互补的最少操作次数 给你一个长度为 偶数 n 的整数数组 nums 和一个整数 limit 。每一次操作,你可以将 nums 中的任何整数替换为 1 到 limit 之间的另一个整数。 如果对于所有下标 i(下标从 0 开始&…