自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 重谈DFS

相信对于DFS深度优先遍历算法,大家都是不陌生的,并且就算你没有通过DFS这种说法,你也应该知道递归算法。没错,DFS就是一种递归算法,只不过好的DFS都会采取各种各样的剪枝来使算法复杂度尽可能的降低,事实证明,有了剪枝的DFS递归算法可以说在思路和时间空间复杂度的博弈当中取得了令人较为满意的结果。首先,递归算法是出了名的思路简单,但复杂度很高的算法,因为采用递归时我们把大部分工作交给了电脑来完成,我一直认为,采用递归算法时,我们可以解决一些表面上看来及其复杂的问题,而并不需要对其实现细节过度关心,也正是因

2020-11-11 16:41:31 195

原创 c++数组调用

c++ 二维数组调用class Solution {public: int movingCount(int m, int n, int k) { vector<vector<int>>vis(m,vector<int>(n,0)); return dfs(m,n,0,0,k,vis); } int dfs(int m,int n,int i,int j,int k,vector<vector<int&

2020-11-08 23:32:50 1353

原创 排序算法总结

排序算法是一类重要的算法,也是最基础的一类算法,在学习排序算法的时候,涉及到大量的各种核心算法概念,例如大O表示法,分治法,堆和二叉树之类的数据结构,随机算法,最佳、最差和平均情况分析,时空权衡以及上限和下限,其重要性不言而喻,下面就介绍一些常见的排序算法时间复杂度时间复杂度是衡量一个算法的重要指标,通常用大O表示法来表示,其反应了算法对数据的操作量级空间复杂度空间复杂度表示一个算法小号空...

2020-03-31 12:08:28 441

原创 BFS“填海造陆”

先来看下题目:看到题目后,先想到了BFS的做法,但是却找错了“中心点”;我一开始是将海洋作为遍历的中心点,然后找每个海洋与所有陆地的距离后求出最小距离,然后等到所有海洋都被遍历完后,取之前求过的最小距离中的最大值即为答案,代码是这样的:class Solution {public: int maxDistance(vector<vector<int>>&am...

2020-03-29 10:03:05 309

原创 分治法“戳气球”

最后的解法多半是贪心或者动态规划,大概率动态规划。但依照流程来看,找不到最优子结构。每次戳气球都会影响之后戳的气球,状态太多了。比如同样是戳数字5号,因为之前戳气球的情况不同,左右邻居不同,这意味着戳5号的情况不能复用。就这样想着,完全找不到思路。(后来发现是被正向思维给限制了)干想也没办法,直接用动态规划的范式硬做。nums = [3,1,5,8] --> [3,5,8] --...

2020-03-25 22:26:31 552

原创 递归与二叉树

众所周知,二叉树可谓是递归中最典型的例子了,可谓是如影随形。凡是有关二叉树的问题,基本都可以用递归来解决,这也给了我们一个启示:看到二叉树,首先就要想到递归。经过一番的刷题,渐渐总结出了有关二叉树的一些套路,也就是递归模板。一次只考虑一个点,没个点把自己要做的做好而不要关其他的点(我们一般首先考虑根节点)。F(TreeNode root){ //先序遍历(先对root操作) F(Tre...

2020-02-18 14:32:29 373

转载 一文学会递归题

于我而言,递归实在是一种非常美的算法,用它写出来的代码既简介又易懂,而且最重要的是,可结解释度又非常高。它的精妙之处就在于,你可以“自顶向下”地分析问题,而不必纠结于细枝末节。所以递归是我比较喜欢的一种算法。递归解题精髓在于以下几点:1.定义一个函数,并明确它代表的含义,也就是说要明确这个函数的功能是什么,由于递归的特点是问题和子问题都会调用函数自身,所以这个函数的功能一旦确定了, 之后只...

2020-02-16 12:10:25 314

原创 二叉树最长路径和

今天在leetcode上刷到了一个“二叉树最长路径和”的问题,难度等级为“Hard”,尝试做了一遍后发现在节点数全为负数时答案出错,后来借鉴题解上的思路又经过一番思索,下面谈谈的的一些见解。首先读懂题意很关键,看到评论区有人说不理解题目什么意思,导致根本无从下手,其实这道题的意思就是类似于“一笔画完”,经历的节点值之和最大,不能走回头路,那么就此我们先看一下相关题解:解题思路:二叉树 abc...

2020-02-13 22:30:44 338

原创 C++ vector数组的使用方法(简化实用版)

在C++中,vector是一个非常有用的“容器”,它能够存放各类型的数据,并且可以动态分配内存。下面介绍一下使用vector需注意的几点:1.vector数组的初始化(1): vector ilist1;默认初始化,vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况。...

2020-02-13 13:39:22 1097

原创 打家劫舍问题

今天我们来聊聊leetcode上的“打家劫舍”系列问题。我们可以回顾一下之前说过的“股票问题”,然后同样的我们用一个模板来团灭“打家劫舍”系列问题。这次当然还是【动态规划】,之前有想过用“贪心”来做,后来发现无法实现对所有情况的穷举遂转向动态规划,之前有说过动态规划其实是优化了的穷举法,比较适合解此类看似情况繁多但同时又联系紧密的问题,简直是屡试不爽。下面我们开始步入正题。对于所有动态规划...

2020-02-12 21:48:58 591

原创 复盘股票问题

通过leetcode上的几道经典的股票问题,我们由浅入深地认识到动态规划的精妙之处,下面我们来复盘一下股票问题的解题思路,看我们是如何抽丝剥茧,一步一步地逼近正确思路,迎来柳暗花明的。首先还是老生常谈的问题:遇到动态规划问题,首先思考【状态】和【选择】的问题。在股票系列问题中,最初拿到题目时不要慌,再复杂的问题都是有套路可循的,若要用动态规划,我们首先要思考其【状态】,再说的通俗一点就是【变量...

2020-02-11 18:42:01 330

原创 leetcode股票买卖问题

leetcode上的股票买卖问题也属于比较经典的动态规划问题,其实上面的几道股票问题实际上思路是相同的,只不过处理时,状态繁简不一。从第一题的交易次数为1作为入门级引入此类问题,再到后来的步步深化,无不体现着动态规划的精妙之处。在此类问题中,我们还是按照之前所说的思路,找【状态】,做【选择】,择优处理,返回最终结果。在此题中,我们思考其状态可以得知此题的状态有:1.天数 2.该天是否持有...

2020-02-11 14:47:07 249

原创 随笔

动态规划构造dp数组的思路:构造的dp数组要含义明确(dp数组的含义决定了后续代码的结构),且要便于归纳(说白了就是从已知推导未知,便于寻找状态转移),要明确base case是什么(这一点很重要),和base case同等重要的是end case也就是要求的结果在数组中的那个位置(不同的问题对应的解存在位置不同,有的是dp[m][n](右下角),有的是dp[0][n](右上角),要具体问题具体分...

2020-02-10 16:00:58 401

原创 碎碎念

动态规划的核心思想是数学归纳法对于数学归纳法相信我们都不会感到陌生,毕竟在中学的时候已经接触并学习过,其思想就是先找出一个base case即初始条件,那么我们先假设这个结论在 k<nk<nk<n 时成⽴,然后想 办法证明 k=nk=nk=n 的时候此结论也成⽴。如果能够证明出来,那么就说明这 个结论对于 kkk 等于任何数都成⽴。类似的,我们设计动态规划算法,不是需要⼀个 ...

2020-02-07 10:59:56 181

原创 动态规划问题答疑

这篇⽂章就给你讲明⽩两个问题:1、到底什么才叫「最优⼦结构」,和动态规划什么关系。 2、为什么动态规划遍历 dp 数组的⽅式五花⼋门,有的正着遍历,有的倒 着遍历,有的斜着遍历。一:.最优子结构一定要符合各个子问题间是相互独立而不是互相牵连互相制约的,比如你想要在考试中取得最优的成绩,你只需要在每一门科目中都取得最优就行,再进一步细分就是每一门科目的每一题都取得最高分就可以;但换句话说,如...

2020-02-06 18:01:01 209

原创 经典动态规划

Data-WorksNever settle浅谈动态规划动态规划问题的⼀般形式就是求最值。动态规划其实是运筹学的⼀种最优化 ⽅法,只不过在计算机问题上应⽤⽐较多,⽐如说让你求最⻓递增⼦序列 呀,最⼩编辑距离呀等等。对于动态规划问题,思路就是:1.这个问题有什么【状态】2.有什么【选择】并择优 3.穷举法求解最后优化(剪枝)。在此举一个动态规划的典型例题:高楼扔鸡蛋问题。(用有限个(k个)...

2020-02-06 15:45:05 165

原创 浅谈递归算法

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...

2020-01-13 18:02:24 470

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除