自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法复习(day1,2,3):复习数组、链表(1)

复习

2023-08-26 23:32:53 60

原创 算法day43|动态规划:0-1背包问题(最大值、次数)、二维背包

https://leetcode.cn/problems/last-stone-weight-ii2.494. 目标和2.1 链接https://leetcode.cn/problems/target-sum/description/转变为组合总和问题的回溯法(超时)动态规划-0-1背包问题:如何将题意通过数学转换转为背包问题如何求装满背包有几种方法,递推为:dp[j] += dp[j - nums[i]];2.3 自己遇到的细节问题target是否存在的保证在自己写的时候经常

2023-08-23 17:06:01 62

原创 算法day42|动态规划:0-1背包问题(二维和一维)、分割等和子集

dp[i][j] :表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。一维模板:理解稍微难一点但写起来简单一点,空间用的少一点。dp[j] :表示放进容量为j的背包,价值总和最大是多少。二维模板:好理解但空间使用多一点,并且写起来复杂一点点。

2023-08-22 11:15:08 103

原创 算法day41|动态规划:整数拆分、不同的二叉搜索树

dp[i] += dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]——左右变化,且总数为当前i -1。找重叠子问题——通过dp[1] 和 dp[2] 来推导出来dp[3]的某种方式。

2023-08-21 16:41:01 56

原创 算法day39|动态规划:不同路径Ⅰ、Ⅱ

【代码】算法day41|动态规划:不同路径Ⅰ、Ⅱ。

2023-08-21 15:46:56 846

原创 算法day38|动态规划:五步骤、入门题

因为dp[0]在本题没有意义。

2023-08-21 13:59:04 23

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

这两天进度掉的有点多,暂缓总结。

2023-08-20 18:22:13 26

原创 算法day36贪心算法| 区间问题

【代码】算法day36贪心算法| 区间问题。

2023-08-20 17:16:23 17

原创 算法day34|贪心:柠檬水找零、根据身高重建队列、重叠区间问题1(射气球)

局部最优:优先按身高高的people的k来插入。插入操作过后的people满足队列属性。-遇到两个维度权衡的时候,一定要先确定一个维度,再确定另一个维度。全局最优:最后都做完插入操作,整个队列满足题目队列属性。

2023-08-17 12:59:40 30

原创 算法day33|贪心:K 次取反后最大化的数组和、加油站、分发糖果

局部最优:只找数值最小的正整数进行反转,当前数值和可以达到最大(例如正整数数组{5, 3, 1},反转1 得到-1 比 反转5得到的-5 大多了),全局最优:整个 数组和 达到最大。局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。局部最优:净油量累加和一旦小于0,可能的起点换到下一个。

2023-08-14 16:48:15 26

原创 算法day32 | 贪心:股票购入最佳实际、跳跃游戏Ⅰ、Ⅱ

本题和2区别在于,2是覆盖着最小次数在走,并没有记录关于次数的概念/记录一次新的跳跃。而3则是在i == curDistance最大覆盖范围时,记录一次次数。局部最优:在当前范围内找最大的可移动距离,如果还没到终点,跳跃次数再加一。局部最优:收集每天的正利润,全局最优:求得最大利润。整体最优:一步尽可能多走,从而达到最小跳跃次数。

2023-08-13 00:23:31 41

原创 算法day31 | 贪心:分发饼干、最大子数组和、摆动序列

贪心例子。

2023-08-12 22:01:46 36

原创 算法day30 | 回溯:重新安排行程、N皇后、解数独

【代码】算法day30 | 回溯:重新安排行程、N皇后、解数独。

2023-08-11 23:14:01 24

原创 算法day29 | 回溯:递增子序列(不排序去重)、全排列、全排列Ⅱ(去重)

如果排列问题去重(i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false),和组合问题去重相比。为什么排列问题不用 startIndex?可以理解成一个单向一个双向。startindex的存在就是构造一个单向。-//本题求自增子序列,是不能对原数组进行排序的,排完序的数组都是自增子序列了。所以不能使用之前的去重逻辑!

2023-08-11 17:53:40 27

原创 算法day28 | 回溯:复原 IP 地址、子集、子集 II

可以看作组合题目,不限制结果长度的版本。

2023-08-10 17:00:12 23

原创 算法day27 | 回溯:组合总和、分割回文串

值可以重复取、一个集合来求组合。

2023-08-07 16:32:58 65

原创 算法day24 | 回溯:模板、组合问题Ⅰ

这里使用的是一种深度优先搜索(DFS),搭配回溯来确定可能的所有情况。

2023-08-06 21:38:23 21

原创 法day25 | 回溯:组合问题、电话号码字母组合

在组合题目中,每次对于其for的宽度进行更新(以参数传递)

2023-08-06 21:24:14 58

原创 法day23 | 二叉树搜索树:修剪二叉搜索树、有序数组转为二叉搜索树、累加二叉搜索树、二叉树锯齿形层序遍历

【代码】【无标题】

2023-08-06 00:24:00 55

原创 算法day22 | 二叉树搜索数:最近公共祖先、插入、删除

与二叉树全部遍历相比,二叉搜索数由于其特性,只用遍历一条路。

2023-08-05 11:09:45 30 1

原创 算法day21 | 二叉树:二叉搜索树双指针、二叉树的最近公共祖先

sorted((c1, c2) -> c2.getValue().compareTo(c1.getValue()))对流中的元素进行排序。map.entrySet()将Map转换为Set,然后调用entrySet()方法返回一个包含键值对(Map.Entry)的集合。.collect(Collectors.toList())将排序后的流收集到一个新的List中。.stream()将Set转换为一个流(Stream),以便对其进行后续的操作。

2023-08-04 21:21:50 31 1

原创 算法day20 | 二叉树:总结、树左下角值、路径总和、根据遍历构建树及迭代法初步学习

【代码】算法day20 | 二叉树:总结、树左下角值、路径总和、根据遍历构建树及迭代法初步学习。

2023-07-31 21:45:58 36 1

原创 算法day19 | 二叉树:总结、树左下角值、路径总和及根据遍历构建树

DFS的本质是每一步做选择,当这个选择可做可不做(比如迷宫,这一步可以走,也可以不走),要在递归之后回溯,如迷宫问题当遇到一个选择时,一定要对它操作时,那么就不需要回溯。比如要标记求所有情况,找到了就要标记。如果取消标记,那么就会重复计算,例:求连通块的个数求深度可以从上到下去查 所以需要前序遍历(中左右)而高度只能从下到上去查,所以只能后序遍历(左右中)求最大深度:回溯VS不回溯:(后序遍历),对于树中的任意一个节点,如果知道它子节点的答案(0),你能计算出该节点的答案(max+1)

2023-07-30 22:33:45 77 1

原创 算法day17 | 二叉树:平衡二叉树判断、二叉树所有路径、左叶子节点和

今天是生日~也希望24岁的自己可以找到一份满意的工作,顺利毕业^ ^

2023-07-28 00:02:58 67 1

原创 算法day16 | 二叉树:深度搜索(递归法)、层序遍历应用、完全二叉树

在求最大最小深度部分,均为后序遍历(先求左右子树,再加上中间节点)

2023-07-27 12:45:38 44 1

原创 算法day15 | 二叉树:层序遍历、反转树、对称树

代码逻辑:1.根据队列(FIFO)存下来各个节点的左右节点再poll 2.利用队列size快照定poll次数。

2023-07-26 19:19:35 65 1

原创 算法day14:二叉树的遍历

前中后指的是中间节点的位置深度优先遍历:先往深走,遇到叶子节点再往回走。广度优先遍历:一层一层的去遍历。

2023-07-25 12:51:32 39

原创 算法day12 | 队列和栈:队列的应用(滑动窗口、前k数频率)

双端队列和栈都可以用Deque实现。java.util.Deque双端队列来实现队列与栈的各种需求pop() 一般指弹栈poll()指出队两者都是删除双端队列第一个元素:pop() 方法等价于removeFirst(), 底层调用的是removeFirst()方法。poll()方法等价于pollFirst() 方法,底层调用的是pollFirst()。栈:加入到双端队列开头:push弹出双端队列开头poppoll返回双端队列开头:peek加入双端队列最后面:add。

2023-07-24 17:36:18 75

原创 算法day11 | 队列和栈:栈的应用

上面这些问题用数组等可能也能完成,但由于其题目特点(对称匹配/每一个子表达式要得出一个结果,然后拿这个结果再进行运算,类似递归),借助栈结构的特性,可以用简单的方法就解决。

2023-07-23 18:28:28 21 1

原创 算法day10 | 队列和栈:实现队列和栈

/每次新数字进去之后,除。

2023-07-21 22:18:59 26 1

原创 算法day9 | 字符串:KMP(暂未完成)

典型的用空间换取时间的方法,

2023-07-20 23:14:12 32

原创 算法day8 | 字符串:反转字符串

很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前用。剑指 Offer 05. 替换空格。进行操作,避免时间复杂度过高。

2023-07-19 22:24:44 24

原创 算法|day6 哈希表:HashMap实现哈希表、双指针和hash法解决求和问题

在本题的情况下,使用map的空间消耗要比数组大一些的,因为map要维护红黑树或者哈希表,而且还要做哈希函数,是费时的!数据量大的话就能体现出来差别了。所以数组更加简单直接有效。类似于多叠一层的“两数之和”,注意的点在于要不断判断是否存在重复。Hash表下标去重相对有些复杂,用双指针中的对撞指针,由于其是。的下标移动,因此更适合这题。类似于多叠2层的“两数之和”,这道题用数组就可以直接解决。

2023-07-18 21:36:19 97 1

原创 算法|day5 哈希表:数组、HashSet、HashMap实现哈希表

注意,使用数组来做哈希的题目,是需要题目都限制了数值的大小,例如这道题,数组的长度可以保持在26以内。如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费。

2023-07-17 13:05:09 92 1

原创 算法|day4 链表:两两交换节点、快慢指针删除链表某节点、链表相交、环形链表

这道题是典型的纯粹链表顺序变化,不存在断链的过程,因此单指针就可以解决。

2023-07-15 22:16:56 43 1

原创 算法|day3 链表:链表的构造、设计、反转链表(断链处理)

这道题分为基于index的增删查以及最前后插入。由于插入节点是对插入位置前一个节点操作,因此建立在最后一个插入不需要单独操作,对最前一个建立虚拟头节点即可。思路为:分析拆解归类问题→根据链表特点编写普适遍历条件→调整一些边界条件的细节,合理使用print来debug。这道题几个方法的结果都是依赖的,因此一个写错就可能报错 next属性不存在等,出现节点为空的情况。问题在虚拟头节点使用,链表增删改查操作真正对象的理解以及链表遍历的细节三个方面。这题可以深入理解链表中引用(指针)的概念和用法。

2023-07-15 12:21:42 390 1

原创 算法|day2 数组:对撞指针、滑动窗口及螺旋数组

因为之前也做过这道题,很容易想到双指针中的对撞指针,但还是遇到了两个小问题。滑动窗口常用于求最小长度,快慢指针常见于最大长度。

2023-07-13 14:35:33 488 1

原创 算法|day1 数组:二分法、快慢指针

二分查找。

2023-07-12 11:26:22 481 2

空空如也

空空如也

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

TA关注的人

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