自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 动态规划:最长重复子数组

本题不算难,但是如果直接想dp数组怎么定义的话就会头晕,先想递推公式的含义就知道为什么需要冗余的dp[0][0]了。

2024-06-13 16:34:38 185

原创 动态规划:最长连续递增序列

理解了最长递增子序列就不难了。

2024-06-12 15:46:20 81

原创 动态规划:最长递增子序列

我的理解是:以下标i为界,能和i组成递增子序列的长度。本题难点在于对递推公式的理解。

2024-06-12 15:19:15 193

原创 动态规划:买卖股票的最佳时机含手续费

本题是买卖股票的最佳时机2的进阶版,只需在每次卖出时扣除手续费。

2024-06-11 14:57:56 144

原创 动态规划:买卖股票的最佳时机含冷冻期

本题是买卖股票的最佳时机3的进阶版,多了一个冷冻期的状态,而冷冻期状态依赖前一天卖出的状态,所以不持有状态要被拆开为保持卖出,和卖出状态。

2024-06-11 14:38:02 150

原创 动态规划:买卖股票的最佳时机 II

不持有状态下分为,按照前一天不持有,要不就是按照前一天持有的手头最大现金,卖出当前股票。不持有状态下分为,按照前一天不持有,要不就是按照前一天持有的手头最大现金,卖出当前股票。持有状态下又分为按照前一天不动,要不就是以前一天不持有的手头最大现金买入。持有状态下又分为按照前一天不动,要不就是以前一天不持有的手头最大现金买入。定义一个二维dp数组,i表示第几天,0表示持有,1表示不持有。所以dp[0][0] = -prices[0];所以dp[0][1] = 0;1.确定dp数组含义。所以分为两个递推公式。

2024-06-06 16:51:30 177

原创 动态规划:打家劫舍 II

打家劫舍的解法和背包问题是两种不同的解题思路。打家劫舍2的关键思路在于对不同情况的分析。但同样是依赖于前面的状态推导。考虑首节点,不考虑尾结点。考虑尾结点,不考虑首节点。从这两个里面选取最大值。

2024-06-05 11:27:16 223

原创 动态规划:单词拆分

这道题虽然模板像动态规划,但是按照背包问题的思路想这道题是想不出来的。解法还是有区别于背包问题。还是带入代码理解吧。

2024-05-31 14:34:17 193

原创 动态规划:零钱兑换

dp[j-coins[i]]+1,以amount=4,coins=1,2举例,dp[j-coins[i]]意味着dp[2]时最少用了几枚硬币,再加上自身这枚也就是dp[j-coins[i]]+1。= Integer.MAX_VALUE 防止溢出。dp[0]=0,确定面额为0,只有0个硬币,其他下标初始化为最大值。0-amount,每个面额最小用几个硬币。可以取多次,则正序遍历。1.确定dp数组含义。

2024-05-30 12:09:15 188

原创 动态规划:目标和

因为是求方式数,dp[0]初始化为1,不用非得死扣为什么为1,知道是为了推出正确答案才这么初始化就够了。本次和最后一块石头的重量2有异曲同工之妙,都是要分成两堆。正数的集合总和-负数的集合总和=目标和,那么怎么求出正数的集合;这道题开题解给我看的一脸懵,最后还是靠着手动画图才稍微明白。所以,正数的集合总和-(总和-正数的集合总和)=目标和。很难解释含义,只能靠带入递推公式,手动画表格理解。所以,正数的集合总和=(总和+目标和)/2。负数的集合总和=总和-正数的集合总和。正数的集合总和=最大背包重量。

2024-05-28 14:03:59 189

原创 动态规划:最后一块石头的重量 II

这道题的思路是,将石头分成两堆,两堆石头重量越平衡,相撞后得到的重量最小,而不用考虑具体哪些石头碰出来的。本题上来犯了一个大错,就是被题目的提示带偏了,从被具体怎么分石头迷惑住了,而没有从整体想。石头只能取一次,故从后向前遍历。重量0-n分别能装的最大重量。本题是分割等和子集的变种。1.确定dp数组的含义。固定的背包问题递推公式。

2024-05-27 15:49:40 192

原创 mysql索引优化

对于辅助的联合索引(name,age,position),正常情况按照最左前缀原则,这种情况只会走name字段索引,因为根据name字段过滤完,得到的索引行里的age和position是无序的,无法很好的利用索引。在MySQL5.6之前的版本,这个查询只能在联合索引里匹配到名字是 ‘LiLei’ 开头的索引,然后拿这些索引对应的主键逐个回表,到主键索引上找出相应的记录,再比对age和position这两个字段的值是否符合。

2024-05-24 17:30:35 369

原创 动态规划:分割等和子集

题目中给的nums数组,以nums=[1,5,11,5]为例,可以分析为有4个物品,每个物品的重量为weight=[1,5,11,5],每个物品的价值为value=[1,5,11,5]这道题是01背包问题的抽象,这道题的难点在于怎么绕明白遍历顺序是从后往前。重量从0到maxWeight,分别能装的最大价值。最大容量为:(1+5+11+5)/2。只能选取一次,从后向前。1.确定dp数组含义。

2024-05-24 14:50:06 116

原创 动态规划:01背包问题

因为只能放一个,物品0的重量为1,价值为15,所以背包重量为1的时候,最大价值为15,那么最大重量为2的时候呢,因为只有一个物品0供我们放,所以重量为2时的最大价值依旧为15,初始化后的表格也就是。此时正好可以放一个物品0和一个物品1,也就是当背包重量为3时的最大价值,加上背包重量为1时的最大价值。肯定是物品0,因为物品1超重了,重量为3,所以放不了物品1,选择不放,则继承物品0的价值。肯定是物品0,因为物品1超重了,重量为3,所以放不了物品1,选择不放,则继承物品0的价值。

2024-05-23 16:14:09 334

原创 动态规划:不同的二叉搜索树

以n=3为例,这几种二叉树大体上是由头节点1、2、3组成的,n=3的情况下,有几种二叉树等于头结点1的二叉树数量+头结点2的二叉树数量+头结点3的二叉树数量。那么具体的递推公式是什么,假设n=3,头结点j=1的话,头结点为1的二叉树数量=左子树数量*右子树数量,以此类推加3次,就得出了n个节点有几种二叉树了。本题的dp[0]初始化为1,可以理解为只有1才能推出正确结果,我不认同0个节点它也是二叉树,初始化为1完全就是能推出正确结果。以n=3为例,dp[0]代表0个节点的情况下,能组成几种二叉树。

2024-05-23 14:48:25 591

原创 动态规划:整数拆分

以3为例,3可以被拆分为1*(3-1),或是1*(1*1),那么这个(1*1)又是组成2的,所以从拆分两个数,和拆分为3个以上的数乘积中选择一个最大的。故递推公式为Math.max(1*(3-1),1*dp[3-1]);那么dp[3-1]又代表什么含义,dp[3-1]=dp[2],意味着2拆分后的最大乘积1*1,也意味着上述的1*1*1,意味着Math.max(1*2,1*1*1);为什么不初始化3了,因为3可以被拆分为3个数1,1,1或两个数1,2,并且3可以从前面的数推导出来。1.确定dp数组含义。

2024-05-22 13:46:17 270

原创 动态规划:不同路径 II

此题的解题思路和不同路径 1是一样的,不同点在于网格内出现了障碍物。体现出了初始化的重要性。初始化第一行第一列,遇到障碍物的情况下,障碍物后的走法都为0,符合生活常识。因为后面的状态依赖前面的状态推导,所以选择从前向后遍历。dp数组中每个元素代表网格内每个位置有几种走法。1.确定dp数组含义。

2024-05-22 12:39:48 308

原创 explain详解与索引最佳实践

mysql执行计划explain结果里的key有使用索引,如果select后面查询的字段都可以从这个索引的树中获取,这种情况一般可以说是用到了覆盖索引,extra里一般都有using index;覆盖索引一般针对的是辅助索引,整个查询结果只通过辅助索引就能拿到结果,不需要通过辅助索引树找到主键,再通过主键去主键索引树里获取其它字段值。

2024-05-22 11:45:32 929

原创 深入理解Mysql索引底层数据结构与算法

是帮助mysql高效获取数据的排好序的数据结构为什么不选择二叉树?因为容易形成链表。

2024-05-21 17:17:46 671

原创 java面向对象:概述及两大要素(类与对象)

面向对象,是软件开发中的一类编程风格、开发范式。

2024-05-21 14:43:38 128

原创 动态规划:不同路径

题意是有一个m*n的网格,所以需要一个m*n大小的dp数组,每个位置代表到达此位置有几条不同的路径。因为机器人每次只能向下或者向右移动一步。所以dp[m][n]位置的路径条数一定是依赖前面的状态。第一行每个位置一定只有1条路径,所以dp[0][0到n]的位置全部初始化为1。第一列每个位置一定只有1条路径,所以dp[0到m][0]的位置全部初始化为1。第i,j位置的路径条数=上一行当前列的条数+当前行上一列。所以需要从前向后遍历。1.确定dp数组含义。

2024-05-21 11:24:08 119

原创 动态规划:使用最小花费爬楼梯

含义:第i阶台阶的最小花费=Math.min(i-1阶台阶已经花的最小花费+从i-1阶开始要花费的,i-2阶台阶已经花的最小花费+从i-2阶开始要花费的)公式为:dp[i] = Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);后面的状态由前面的状态转移过来,所以要从前向后遍历。所以dp[0]=0意味着第0阶开始,已经花费0。所以dp[1]=0意味着第1阶开始,已经花费0。在第i个台阶已经花费的体力/费用。题意:你可以选择从下标为。1.确定dp数组含义。

2024-05-21 10:24:40 484

原创 动态规划:爬楼梯

此题的思路和斐波那契数列是差不多的,都是前一项加前前项的和。唯一的区别在于dp[0]的初始化,正常应该是不初始化dp[0],但要是从第2阶开始推,就必须初始化dp[0]为1才能推出正确答案。dp[0]初始化为1,dp[1]初始化为1,这样可以正确推导出结果。因为后面的结果依赖前面的结果,所以是从前到后遍历。dp数组第n项为第n阶台阶有几种方式到达顶楼。第n项的结果为第n-1项加第n-2项。1.确定dp数组含义。

2024-05-20 14:47:41 186

原创 动态规划:斐波那契数列

根据题意,第三个数是由前面一个数+前前面一个数,所以递推公式为dp[i] = dp[i-1]+d[i-2]。题解可以优化,只需要一个大小为2的dp数组就足够,但为了体现递归的特性,故这么写。根据题意,dp[0]=0,dp[1]=1,这么初始化就够了。由于后面的状态是由前面推导出来的,所以需要从前向后遍历。这道题的dp数组含义是,第n个位置的斐波那锲数。遇到解题错误的情况,打印dp数组排错。5.打印dp数组(可选)1.确认dp数组含义。

2024-05-20 11:20:27 298

原创 贪心算法: 单调递增的数字

倒序遍历每个数字,遇到前一个比后一个大的就减一,最后同意把后面几位置为9。

2024-05-17 13:40:23 163

原创 贪心算法:合并区间

这两道题目后,题意和题解都不难理解。唯一的一点儿难点是对于api的运用。

2024-05-16 14:37:19 281

原创 贪心算法:划分字母区间

题目的解题思路不难理解。分别统计每个字母最后出现的下标,此处有个小技巧,利用ascii码作差得到每个字母的位置。再遍历一遍字符串,到某个字母的最远下标处开始分割,计算长度。

2024-05-16 13:50:33 202

原创 贪心算法:无重叠区间

此题res初始化为1,默认有一个不重复的区间;总数量减去所有不重复区间的数量,就是要移除的重复区间数量。

2024-05-15 11:03:38 106

原创 贪心算法:用最少数量的箭引爆气球

【代码】贪心算法:用最少数量的箭引爆气球。

2024-05-15 10:18:15 209

原创 贪心算法:根据身高重建队列

先根据身高hi维度降序排列,因为ki要求的是前面的都比后面的高。再根据身高相同的降序排列ki。因为要满足ki,所以调整ki位置。

2024-05-14 15:05:04 208

原创 贪心算法:柠檬水找零

【代码】贪心算法:柠檬水找零。

2024-05-14 13:34:37 98 1

原创 贪心算法:分发糖果

题意,“每个孩子至少分配1个糖果”,从中分析出,用1填满一个ratings大小的数组;“相邻两个孩子评分更高的会获得更多的糖果”,分析出夹在中间的那个孩子糖果数量多余两侧;

2024-05-09 14:22:41 192

原创 贪心算法:加油站

本题贪心算法的思路是算出每一站剩余的油量,如果总耗油量是负的则跑不完一圈。如果能跑完一圈的话则去找起始位置,累加从起始位置的耗油量,如果出现负的,则重新记起始位置。

2024-05-09 11:50:26 191

原创 贪心算法:K 次取反后最大化的数组和

所以需要先对nums进行排序,排序思路为每个数的绝对值倒序排序,这样如果有负数的话第一个数就是最小的,最后一个数肯定为最小的;本题的贪心思路是先在k次内把负数全部变正,再用非负的数消耗完k;

2024-05-08 15:12:31 107 1

原创 贪心算法:买卖股票的最佳时机 II

再一次体会到了贪心算法的巧妙……

2024-05-07 11:26:12 93

原创 贪心算法:最大子序和

题目不难理解,题解也不难理解,难的是能想到题解中的贪心策略。

2024-05-06 11:39:40 184

原创 贪心算法:摆动排序

做题就是积累解体思路的一种方式,不会的没必要自己死扣。没思路就去看题解,碰到同类型的题目时自然会有思路。当看到此图的时,恍然大悟,原来还能这么思考。结合这张图再看题解,就很好理解了。首次读完题目,一点思路没有。

2024-05-06 10:48:34 379 1

原创 贪心算法:分发饼干

难度不大,主要思路就是从尺寸最大的饼干开始,喂给胃口最大的孩子,这样能充分利用没一块饼干。主要要对饼干尺寸和孩子胃口进行排序。这是一道入门题,主要是为了理解从局部最优解得了全局最优解。

2024-04-30 17:59:40 84

原创 CSS3学习笔记

例如50vw视口的50%

2024-04-30 17:56:05 96

原创 回溯算法:N皇后——通关回溯算法的题目

这道题的解法还是套用回溯算法的模板。个人认为的难点在于对题目的理解,和校验棋子摆放位置是否符合规则。个人理解如果以后碰到需要嵌套N层for循环的题目,可以选择回溯算法。

2024-04-29 15:52:49 114

空空如也

空空如也

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

TA关注的人

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