自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 day45 动态规划 | 70,322,279

完全背包,计算总量(需要考虑顺序 先遍历背包再遍历物品)​​​​​​​完全背包,求最小的数量。无需考虑顺序,内外层遍历顺序随机。70. 爬楼梯 (进阶)先将dp[i]置为Max。​​​​​​​同322。

2023-05-19 08:37:33 115

原创 day43 动态规划 | 518,377

和01背包的区别是遍历顺序的不同。518. 零钱兑换 II。377. 组合总和 Ⅳ。注意看是求组合 还是排序。

2023-05-18 08:23:21 107

原创 day43 动态规划 | 1049,494

首先将石头分成重量相等的两堆,然后 sum - 2 * dp[target];* 因此 求 S(a) = (sum + target) / 2;* dp[i] 填满容量为i的背包有多少种方法。* 假设正子集为 S(a) 负子集为S(b)1049. 最后一块石头的重量 II。

2023-05-17 08:23:17 110

原创 day42 动态规划 | 01背包,43

​​​​​​​转换为 背包重量为 sum /2,物品价值为num[i]的01背包问题解决。01背包问题,你该了解这些!416. 分割等和子集。

2023-05-16 13:44:42 69

原创 day41 动态规划 | 343,96

96.不同的二叉搜索树。

2023-05-15 08:14:55 53

原创 day39 动态规划 | 62,63

机器人每次只可以向右 或者 向下 (每次向右走 )* i的范围 [0,m - 1]* j的范围 [0,n - 1]63. 不同路径 II。解法同上,需要考虑障碍物。

2023-05-13 19:52:43 201

原创 day37 贪心 | 56,738

先按照左边界进行排序,然后判断右边界是否重叠,更新区间。738.单调递增的数字。

2023-05-11 08:23:35 47

原创 day36 贪心 | 435,763

435. 无重叠区间。763.划分字母区间。

2023-05-10 08:33:46 44

原创 day35 贪心 | 860,406,452

先按照身高进行高到低排序,再按照位次插入即可。​​​​​​​如果重叠了直接count++;452. 用最少数量的箭引爆气球。按照客户给的钱进行不同的找钱策略。406.根据身高重建队列。如果不重叠更新最小的右边界。先按照左边界进行排序。

2023-05-09 08:34:20 59

原创 day34 贪心 | 1005,134,135

按照一定的策略,先绝对值排序,再负数修正,最后对绝对值最小的数进行替换,再求和。​​​​​​​判断是否可以从i 到达i + 1。1005.K次取反后最大化的数组和。​​​​​​​采用两次遍历计算糖果数。判断gas总量是否大于cost。

2023-05-08 08:34:47 38

原创 day32 贪心 |122,55,45

贪心找到最大的覆盖范围,每次都看覆盖范围是否超过了总范围 超过即可。* 每天都有着卖出和不卖出两种状态,dp解决。* 贪心找到最大的覆盖范围 和 最小步数。122.买卖股票的最佳时机II。

2023-05-06 08:20:17 41

原创 day31 贪心 | 455,376,53

LeetCode 53 最大子序和 (求和,如果当发现sum < 0时,直接放弃本次操作,置0【贪心策略】)* LeetCode455 分发饼干 (优先将小饼干给胃口小的即可)* LeetCode376 摆动序列 (统计正负摆动序列的个数)

2023-05-05 08:23:44 54

原创 day29 回溯 | 491,46,47

和组合的区别是,排列需要考虑顺序,因此不能使用startIdx + 1进行数据去除(之后可能使用),需要保证单次递归单个数使用一次(boolean used)* 重复数据,去重套路一致 (sort + used[i - 1] 相同数据,之前使用过的无需再使用)* 采用单层hashmap记录去重,回溯时map会重新刷新,无需回溯处理。* 491.递增子序列。* 47.全排列 II。

2023-05-03 11:02:17 52

原创 day28 回溯 | 93,78,90

​​​​​​​收集每个树的节点 + 树层去重。​​​​​​​收集每个树的节点。判断一个分割的值是否有效。回溯需要去掉 '.'

2023-05-02 11:05:07 50

原创 day28 回溯 | 39,40,131

数字可以被无限制选取,但是无需考虑顺序(组合),因此递归还是需要考虑startIdx,但是每次都从最开始进行回溯,而不是startIdx + 1。​​​​​​​每次找到切割点,进行向后寻找回文,合适的加入list,不合适直接进入下一层循环。​​​​​​​通过标识去除重复值(树层去重)

2023-05-01 11:21:59 43

原创 day25 回溯 | 216,17

​​​​​​​解决输入字符对应的序列的映射问题。类似组合问题,单个序列中回溯即可。17.电话号码的字母组合。216.组合总和III。

2023-04-29 10:43:13 46

原创 day24 回溯 | 77

经典的组合问题,使用递归 + 回溯的方式进行解决。

2023-04-28 10:02:43 53

原创 day23 二叉树 | 669,108,538

​​​​​​​类似中序 后序生成二叉树,定位到中间节点 然后向两测构建即可。​​​​​​​左子树不满足条件 或者 右子树不满足条件 返回单边即可。​​​​​​​采用 右 中 左的遍历方式 + 累计。108.将有序数组转换为二叉搜索树。538.把二叉搜索树转换为累加树。669. 修剪二叉搜索树。

2023-04-27 16:04:23 53

原创 day22 二叉树| 235,701,450

也可以按照搜索树的特征,无需进行回溯,从上到下进行遍历。删除节点存在 且 左子树 右子树均都不为空 分别处理。​​​​​​​将固定的数值插入到合适的位置。删除节点存在 且 左子树为空 右子树不为空。删除节点存在 且 左子树不为空 右子树为空。235. 二叉搜索树的最近公共祖先。可以按照二叉树的最近公共祖先进行操作。701.二叉搜索树中的插入操作。450.删除二叉搜索树中的节点。​​​​​​​删除节点不存在。​​​​​​​分几种情况。

2023-04-27 15:59:14 376

原创 day21 | 二叉树 530,501,236

​​​​​​​先转换为有序list,再进行众数统计寻找。​​​​​​​后序遍历,再根据返回的值寻找祖先。530.二叉搜索树的最小绝对差。先转换为有序list,再比较差值。236. 二叉树的最近公共祖先。501.二叉搜索树中的众数。

2023-04-25 08:33:29 50

原创 day20 | 二叉树 654,617,700,98

寻找到二叉树的最大节点和最大位置,按照先序构建二叉树。​​​​​​​先转换为数组 再进行比较是否有序。​​​​​​​同时操作两个二叉树 进行合并。700.二叉搜索树中的搜索。98.验证二叉搜索树。

2023-04-24 08:28:44 42

原创 day16 二叉树| 110,257,404

LeetCode404 计算所有左节点的和。* 二叉树的左右高度相差不超过1即可。LeetCode110 平衡二叉树。* 递归举出二叉树的所有路径。

2023-04-21 08:36:53 37

原创 day16 二叉树 | 104,559,111,222

完全二叉树的节点个数,依旧使用层序遍历,但是从原来的计算‘多少层’,变成循环内的计算‘多少节点’LeetCode 104, LeetCode559 求二叉树 or N叉树的最大深度。当在层序遍历时,发现第一次遍历到了叶子节点,直接返回深度即可。LeetCode111 求二叉树的最小深度。

2023-04-20 08:36:02 40

原创 day15 | 二叉树 102,226,101

LeetCode 101 给定一个二叉树,检查它是否是镜像对称的。* 不是翻转二叉树的值,而是翻转二叉树节点。LeetCode102: 层序遍历二叉树。LeetCode 226 翻转二叉树。

2023-04-19 08:33:11 34

原创 day13 栈与队列 | 239,347

听说是使用单调队列完成,奈何没有点这个技能.. 先用暴力写写(ps:这么写会超时,仅供参考)有时间学习一下单调队列。* TOPK 先记录下单词的频次,再使用最小堆处理。

2023-04-17 08:31:52 50

原创 day11 栈和队列 | 20,1047,150

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。* 注意 除法 和 减法,除法 和 减法都是使用后出栈的值操作先出栈的值,其他都是正常顺序出栈操作。* 比较栈顶元素 和 待入栈元素是否相同,如果相同直接出栈。* 每个右括号都有一个对应的相同类型的左括号。* * 如果字符串为( => 栈中压入)* * 如果字符串为[ => 栈中压入]* * 如果字符串为{ => 栈中压入}* 左括号必须用相同类型的右括号闭合。* 左括号必须以正确的顺序闭合。

2023-04-15 18:08:21 61

原创 day10 | 栈和队列 232 225

使用一个备份队列,保证每一次之前的数据在新插入数据的后面。LeetCode 232 用栈实现队列。* 一个输入栈,一个输出栈实现先入先出。LeetCode225 用队列实现栈。

2023-04-14 08:25:45 56

原创 day09 字符串 | 28,459

LeetCode459 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。注:先找到一个子串,然后去找当前子串 * N能否组成需要的字符串。LeetCode28 找出字符串中第一个匹配项的下标。注: 采用双指针暴力解法(不会KMP..)

2023-04-13 08:29:50 68

原创 day08 字符串 | 344,541,JZ_05,151,JZ_58_2

注: 此处是 left < right 因为当left 和 right处于同一位置时,无需进行原地翻转。每次相隔2k,翻转k个元素,注意 翻转k个元素 和 整体长度的大小关系,可能会超出长度。注: 先去除首尾 和 中间的多余空格 然后进行全部单词翻转,再按照单个单词翻转。注: 特殊方法,先将单个部分进行旋转,然后进行整体旋转。LeetCode 541 翻转字符串II。LeetCode151 翻转字符串的单词。LeetCode 344 翻转字符串。JZ_58_2 字符串的左旋转。JZ_05 替换空格。

2023-04-12 19:40:27 40

原创 day07 哈希专题454,383,15,18

四数之和: 和三数之和一样的思路,但是需要考虑sum的溢出情况 && 剪枝操作。和后续的三数之和,四数之和不同,可以直接用hash表处理。使用双指针 + 部分剪枝 (双指针的思路类似于二分)由于是有限个字符,可以采用字典表的形式进行处理。

2023-04-12 08:25:04 35

原创 day06 | Hash专题 242,349,202,1

两数之和,绝对经典的题目,除了使用Hash之外,唯一的坑可能在于是先判断 还是先入map的顺序了.. (掉进去无数回。* 快乐数 => 最终所有的操作结果会收敛到一个区间(采用set接收,如果重复出现两次,说明已经进入了循环)* set的简单应用(注:一般代码中可以直接写,或者用redis的 set指令来处理并交差级)有效的字母异位词,由于是操作string,可以使用字典(int[26])进行处理。

2023-04-10 13:21:57 57

原创 代码随想录算法训练营第四天| 24,19,面试02.07,142

判断链表的成环点,具体的公式推导 在注释中,之前看过这道题,理解的第一次相遇后使用同样步长一个从相遇点走,一个从头走,距离一样(a == c)其实是错误的,a和c是有一定关系的(a = (n - 1)(c + b) + c ) c+b的整数倍刚好是一个环的长度。因此才最终会到成环点。找出两个单链表的相交起始节点,相当于将一个节点的尾链接上另外一个节点的头部,然后进行遍历,如果有重合点,一定相交。两两交换链表节点,采用原地交换,使用tmp节点进行交换前临时节点存储即可(三个一组)

2023-04-08 15:22:34 49

原创 代码随想录算法训练营第三天| 203,707,206

cur.next = pre => pre = cur =>cur = next(原来的cur的后一个节点,提前存储) return pre;移除链表元素: 为了将处理头结点的逻辑和处理其他节点逻辑保持一致,引入了dummyHead。设计链表(基础中的基础,包含了删除,新增,查找等基础操作,还是会多做几遍)

2023-04-07 13:23:06 114

原创 代码随想录算法训练营第二天| 977,209,59

标准的滑动窗口题,主要是滑动窗口到达临界点如何处理左右边界。* 数组平方后,最大值一定是在两侧 因为可以采用双指针。977.有序数组的平方。209.长度最小的子数组。

2023-04-06 13:47:17 500

原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素

1. 暴力解法: 外层循环遍历数组,如果发现出现需要替换的值,将后续的值均都往前赋值(本意是向前提一位,但是操作上是赋值,需要将末值进行忽略)寻找最左区间 和 最右区间,套路和基础二分法类似,就是要在找到target的时候继续向左或者向右移动。2. 双指针: 快指针遍历数组,找到无需移除的元素,慢指针原地更新。* 考虑如何不让数据溢出,区间如何切换。

2023-04-05 10:51:22 795

原创 HashMap的十个经典问题

整理了一些hashmap的一些经典问题,和大家分享一下…1、谈谈HashMap的一些特性* HashMap存储键值对实现快速存取,key值不可重复,但是允许为null【放在table[0]的位置】,如果key值重复则覆盖* HashMap线程不安全,非同步* 底层是hash表,不能保证有序2、HashMap的结构简介java8之前采用数组(table)【Node<K,V>[]】 + 链表(Node节点组成的链表)的结构java8之后采取数组 + 链表 + 红黑树的结构(单条链上数

2020-08-19 15:23:53 613 1

原创 java基础面试题系列(101-112)[完结撒花]

20200718 by 1z请说明sleep() 和 wait()有什么区别?1、sleep() 是Thread的成员方法而Wait()是Object的成员方法2、sleep()没有释放锁,因此在sleep结束后依旧是原线程执行,而wait()释放了锁,在notify(notifyAll)后其他线程可以使用同步控制块或者方法。3、wait,notify,notifyAll只能在同步控制块方法 or 同步控制块中使用,而sleep可以在任何地方使用。请你说明一下在监视器(Monitor)内部

2020-07-18 09:48:09 361

原创 java基础面试题系列(91-100)

20200717 by 1z91、举例说明同步和异步同步: 发送消息之后需要等待反馈,然后再开始下一次发送信息。异步: 发送一个请求,不等待返回,随时可以再次发送下一个请求。同步和异步的区别: 同步需要等待,异步不需要等待。例子;电话是一个同步的例子,需要等待接收者接通电话才可以进行下一步行为广播是一个异步的例子,不需要等待接收者的反馈信息,可以连续发送信息请介绍一下线程同步 和 线程调度的相关方法(1)wait():使一个线程处于等待(阻塞)状态,并且释放所持有的对象的锁;

2020-07-17 09:58:50 312

原创 java基础面试题系列(81-90)

请你说明ConcurrentHashMap有什么优势,1.7和1.8有什么区别参考链接: https://www.cnblogs.com/like-minded/p/6805301.html请你说明一下TreeMap的底层结构?TreeMap的底层的数据结构是红黑树,红黑树的特性如下1.根节点是黑色的。2.每个节点都只能是红色 or 黑色。3.每个叶节点(NIL节点,空节点)都是黑色的。4.如果一个节点是红色的,则它两个子节点都是黑色的,一条路径上不能出现两个连续红节点5.从任一节.

2020-07-15 10:13:12 309

原创 java基础面试题系列(71 - 80)

20200714 by 1z请你说明HashMap 和 HashTable的区别1.是否同步 *HasMap是同步的,HashTable是非同步的2.继承体系 *HashTable继承自Dictionary,HashMap继承自AbstractMap类,HashMap允许使用null值(key value都行)3.内部是否容纳null值 *HashTable不允许key or value为null,HashMap允许使用null值(key中只能有一个null值,value中可以有多

2020-07-14 10:02:13 316

空空如也

空空如也

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

TA关注的人

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