LeetCode 刷题感想之动态规划
在 LeetCode/剑指Offer 上刷了500题左右了,应该写一篇文章总结一下自己的感想。因为我自己是测试,所以从测试角度来写感受吧。
先说动态规划。
什么是动态规划?是经典算法思想之一,是自底向上的一种穷举,也就是说,如何让计算机更聪明地穷举,并通过空间换时间的方法来降低时间复杂度。
所以动态规划的核心就是状态转移方程,用数学语音来说,是计算机版本的数学归纳法。
1. 已知 F(0) = n.
2. 已知 F(x) = m 成立。
证明 F(x+1) = t 成立。
所以在动态规划中,最重要明确的点是,确定数组dp的定义是什么(划重点,决定了你的边界条件和状态转移方程如何定义),确定数组dp的长度,确定dp[i] 与 dp[i-1] 的关系。只要三者确定好,就可以通过一次循环得到答案。
举个例子(From leetcode https://leetcode-cn.com/problems/running-sum-of-1d-array/ )
给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。
请返回 nums 的动态和。
示例 1:
输入:nums = [1,2,3,4]
输出:[1,3,6,10]
解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。
题解:毫无悬念,动态规划即可解决问题,dp[i] = dp[i-1] + nums[i],PS, 由于我们不需要考虑 nums 的后续处理,dp甚至不需要申请新的空间,直接使用nums即可,而且dp[0] = nums[0],只是在开发过程中需要考虑各种异常情况,答案如下:
class Solution {
public int[] runningSum(int[] nums) {
if(nums == null || nums.length == 0) return null;
if(nums.length == 1) return nums;
for(int i = 1;i < nums.length;i++){
nums[i] = nums[i-1] + nums[i];
}
return nums;
}
}
11/30/2021 补充:
学习到了区间DP,在这里补充一下:
在小区间得到最优解,再利用小区间的最优解合并,得到大区间的最优解。
伪代码:
for(int i = 0;i <= n;i++){
dp[i][j] = 初始值;
}
for(int len = 2;len<=n;len++) //区间长度
for(int i = 1;i <= n;i++){
int j = i+len-1;
if(j > n) break;
for(int k = i;k<j;k++){
dp[i][j] = Math.max(dp[i][j],dp[i][k]+dp[k+1][j]+w[i][j]);
}
}
PPS, Leetcode上有大神总结得很好,参考 https://leetcode.com/discuss/general-discussion/458695/dynamic-programming-patterns#Minimum-(Maximum)-Path-to-Reach-a-Target
LeetCode 刷题感想之动态规划的更多相关文章
- LeetCode刷题感想
断断续续用了半年的时间把LeetCode刷完了,之前复习了数据结构与算法.将刷题与复习数据结构结合起来会更有效果.总之不是为了刷题而刷题,而是为了巩固和补充一部分知识. LeetCode真的是一个很好 ...
- C#LeetCode刷题-动态规划
动态规划篇 # 题名 刷题 通过率 难度 5 最长回文子串 22.4% 中等 10 正则表达式匹配 18.8% 困难 32 最长有效括号 23.3% 困难 44 通配符匹配 17.7% ...
- LeetCode刷题专栏第一篇--思维导图&时间安排
昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...
- LeetCode刷题总结-数组篇(上)
数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...
- LeetCode刷题总结-数组篇(中)
本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...
- LeetCode刷题总结-数组篇(下)
本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...
- LeetCode刷题总结-树篇(上)
引子:刷题的过程可能是枯燥的,但程序员们的日常确不乏趣味.分享一则LeetCode上名为<打家劫舍 |||>题目的评论: 如有兴趣可以从此题为起点,去LeetCode开启刷题之 ...
- LeetCode刷题笔记和想法(C++)
主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p 高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己 ...
- LeetCode刷题的一点个人建议和心得
目录 1. 为什么我们要刷LeetCode? 2. LeetCode的现状和问题 3. 本文的初衷 4. LeetCode刷题建议 4.1入门数据结构,打基础阶段 4.2 建立 ...
- 看完互联网大佬的「LeetCode 刷题手册」, 手撕了 400 道 Leetcode 算法题
大家好,我是 程序员小熊 ,来自 大厂 的程序猿.相信绝大部分程序猿都有一个进大厂的梦想,但相较于以前,目前大厂的面试,只要是研发相关岗位,算法题基本少不了,所以现在很多人都会去刷 Leetcode ...
随机推荐
- Oracle EBS 查看关联关系
打比方说,如何知道这个视图/表/包/trigger 在其他包/视图等引用. 1. select * from all_dependencies a where a.REFERENCED_NAME = ...
- noi 45 金币
noi 45 金币 1.描述 国王将金币作为工资,发放给忠诚的骑士.第一天,骑士收到一枚金币:之后两天(第二天和第三天)里,每天收到两枚金币:之后三天(第四.五.六天)里,每天收到三枚金币:之后四天( ...
- TDengine上手笔记
TDengine简介 TDengine 是一款开源.高性能.云原生的时序数据库,且针对物联网.车联网.工业互联网.金融.IT 运维等场景进行了优化.您可以像使用关系型数据库 MySQL 一样来使用它. ...
- bash脚本的判断语句之一
开始学习bash的"编程"操作. 其实严格来说,这个脚本语言的语法是比较古老和特殊的,有很多不符合中国人习惯的东西. 因为在中国人的世界里,电脑键盘上面的使用shift才能输出来的 ...
- 解题报告:Codeforces 279C Ladder
Codeforces 279C Ladder 本题与tbw这篇博客上的题有相似思路.tbw的本来我还不会,抄了题解才过,这道题好歹自己磕半天磕出来了.到tbw做那道题我突然想明白了,再一想诶跟这里不是 ...
- 使用Certbot申请证书
使用certbot申请*通配符证书,使用letsencrypt证书服务,使用DNS方式手动验证 certbot certonly --preferred-challenges dns --manual ...
- HTML 到 CSS,乃至进阶的 XML、SQL、JS、PHP 和 ASP.NET
https://www.runoob.com/tags/html-reference.html 在线版,从基础的 HTML 到 CSS,乃至进阶的 XML.SQL.JS.PHP 和 ASP.NET. ...
- 离线谷歌地图API的开发笔记(二)
一.地图引擎介绍 离线地图引擎运行在WINDOWS平台上,底层由Visual c++语言开发,编译为OCX插件方式.占用文件少,便于二次开发的快速安装部署. 具有专业地图的基础操作功能:地图放大.缩小 ...
- HTML弹出对话框功能大全
注://关闭,父窗口弹出对话框,子窗口直接关闭 this.Response.Write("<script language=javascript>window.close();& ...
- The `.update()` method does not support writable nestedfields by default. Write an explicit `.update()` method for serializer `...`, or set `read_only=True` on nested serializer fields.解决办法
原因 Serializers中,外表的字段如source="group.title"不能进行写入操作 解决办法 将外表字段设置为read_only=True,此时可能有人就会问了: ...