自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 单调队列、图的遍历算法

【代码】单调队列、图的遍历算法。

2024-07-25 23:42:05 100

原创 单调栈 ---

用hashmap来存放nums2以及下一个更大元素。因为温度会重复,所以不能用map。Nums1中的数在nums2中找。i%len,2*len-1关键点。

2024-07-24 23:32:12 149

原创 完全二叉树、队列和栈(pop 栈 poll队列

两个队列模拟栈,q1存放之前的元素,q2存放后来的元素。观察左右子树的高度是否相等,再分为两种模式来算。

2024-07-22 23:25:21 195

原创 快速排序、快速选择算法、找最近公共祖先

快速选择算法(快速排序相当于一次只排一个元素在中间,切索引值为p。

2024-07-21 22:07:04 182

原创 二叉搜索树

所以要用一个pre来记录 root之前的值,进行中序遍历即可,用中序遍历 pre和root遍历完全部。注意要验证 左子树均小于根节点的值, 右子树均大于。

2024-07-19 19:35:00 107

原创 二叉树的后序遍历(寻找重复的子树,序列化

前序遍历 序列化和反序列化, 用新的函数帮忙Stringbuilder和 linkedlist 二叉树转字符串,归并排序,左边排序,右边排序 最后merge 要新建一个辅助数组 便于原地修改。

2024-07-18 23:18:09 266

原创 二叉树的构造

每次找最大的结点为分界点以及根节点,左边构成左子树,右边构成右子树,递归。写代码时不能用具体数值,要用形参,因为是递归,所以 用形参来放入即可。主要就是pre 和in 的start和end,以及leftsize。二叉树的构造(前后序用来确定根的位置,中用来划分左右子树。,可以用hashmap保存inorder的映射,提高效率。用根节点来当分界点,所以index为根节点。

2024-07-18 01:41:50 219

原创 二叉树问题,两种解决方法(1遍历 2直接定义名字功能递归

1第一种方法就是另写一个traverse方法,2第二种方法就是把函数名当成已经实现的功能,直接写。可用层序遍历,或者遍历。

2024-07-17 00:22:57 169

原创 数组去重(去重+单调栈 用boolen instack来去重

如果存到一个小的就把比它大的都pop出去,在后面还有的情况下,如果后面没有就不pop了。

2024-07-16 04:15:25 99

原创 常数级别 操作数组和hashmap等

有效的弄在左边 0,sz ,黑名单的弄在右边。常数时间删除-查找数组中的任意元素。用数组来存值,hashmap存索引。

2024-07-16 02:55:44 119

原创 优势洗牌(田忌赛马

Nums2的位置不能改变,所以用优先队列,存储索引的同时弄出最大值,nums1用双指针+排序,因为它位置可以比变化。对nums2进行最大堆排序,存储索引位置和值。Nums1 sort排序即可。

2024-07-15 01:44:10 115

原创 带权重的随机选择算法

用左边界的二分搜索原因是,如果没有目标值,left大于或者等于target。最终的结果是left的索引 代表大于等于target的最小索引,

2024-07-14 21:00:11 177

原创 实际二分搜索(写出函数,再用二分搜索法找左右边界 画图理解

Left为数组最大值,right为总和,还要注意函数如何些,装货的逻辑。运货要通过数组的货物进行left和right的初始化。看到最大值的最小化,左边界,最小化的最大值,右边界。实际二分搜索(写出函数,再用二分搜索法找左右边界。

2024-06-20 15:33:26 136 1

原创 二维数组的遍历

先定义出四个边界点。按照上-右-下-左方式遍历,遍历完慢慢压缩,是左闭右闭区间。遍历哪条边,就压缩哪一条边,遍历上就往下压缩,遍历右就向左压缩。注意,j要从i开始 避免重复反转!

2024-06-14 15:56:40 158

原创 小而美的算法技巧:前缀和数组

表示从矩阵的左上角 (0,0) 到位置 (i-1,j-1) 这个子矩阵的元素和。小而美的算法技巧:前缀和数组。小而美的算法技巧:差分数组。From和to是区间,

2024-06-13 22:16:04 221

原创 Nsum问题

2 判断是否包含,若包含则放回,map.containsKey() ,不然就加入hashmap。For枚举第一个数,for 枚举第二个数,接下来就是两数之和,考虑去重。三数之和(for 找到任一一个元素,再用两数之和)long x long y是担心求和大于int。类中的一个静态方法,使用起来非常简单。方法通常用于将一个数组转换为一个。1先排序,再用首尾双指针。

2024-06-11 18:23:33 204

原创 数组双指针经典习题

Stringbuilder要先转为String,再转为char。双指针从两端往中间移动即可。

2024-06-11 02:36:39 145

原创 双指针数组问题

只要数组有序,就应该想到双指针技巧。以一个数为中心,或者以两个数为中心!两数之和 -输入有序数组。直接创建新数组来表示结果。删除有序数组中的重复项。最长回文子串(分奇偶串。

2024-06-10 01:49:06 135

原创 链表翻转,写法和交换类似,但是需要pre cur 还有一个临时变量nxt记录下一个结点

用快慢指针先找到链表的中间值,再反转中间值后面的链表进行比较。一个字符串是不是回文串就简单很多,不需要考虑奇偶情况,只需要。要弄pre cur 还有nxt(临时变量保存下一个结点。在之前的基础上有所变化,先计算链表的长度。递归反转单链表(头插法反转部分链表。P0指到需要修改的链表的前一个结点。回文串的核心思想是从中心向两端扩展。K个一组的链表翻转,如果长度不够则不翻转。

2024-06-09 14:18:58 169

原创 链表双指针经典习题

每次弹出一个最小值,k—弹出一个再补一个 该行的下一个最小值。每次弹出一个最小值,k—弹出一个再补一个 该行的下一个最小值。如果取得是因子为2的丑数,则product2更新,指针++双指针,一个在前一个在后,如果值相等则进行删除操作。用优先队列,最小堆存放 数值,和行列。用优先队列,最小堆存放 数值,和行列。三个指针,指向2 3 5因子的链。每次存入最小值,指针再向前移动,删除排序链表中的重复元素(P指向丑数链,用于构建丑数。有序矩阵中第k个小的数。有序矩阵中第k个小的数。

2024-05-30 20:16:32 165

原创 双指针技巧,链表

定义两个指针,一个在左一个在右边,距离为n,右指针走n次即可。走到最后一个结点则停止,因为删除结点要知道要删除结点的前一个结点。快慢指针判断链表是否为环形,在相遇点时,slow重置到head。具体来说,我们可以把原链表分成两个小链表,一个链表中的元素大小都小于。,最后再把这两条链表接到一起,就得到了题目想要的结果。单链表的分解(两个小链表可能会成环,要处理。遍历完A遍历B,遍历完B遍历A,之后会相交。虚拟头节点+双指针,都要用虚拟1头节点。,另一个链表中的元素都大于等于。每次弹出最小的结点值,给新链表。

2024-05-28 20:22:11 201

原创 总结篇(代码随想录

在编写代码的过程中,可以记录下自己遇到的问题和解决方案,反思自己的思考过程,探索更加高效和优雅的编程方式。同时,还可以阅读优秀的代码和文章,从中汲取灵感和经验,不断提高自己的编程水平。在过去的60天中,我通过学习卡哥的代码随想录,已经掌握了各种类型的代码,并且积累了不少编程经验。但是,仅仅掌握了基本的语法和算法是远远不够的,还需要进一步提高自己的编程能力。这些问题可能需要更高级的算法或者数据结构,需要更深入地理解计算机科学的原理和概念。编程是一项创造性的工作,需要不断地探索和尝试新的思路和方法。

2024-05-23 11:04:51 115

原创 柱形图的最大矩形

For循环以每个柱子为基准,找左右比它小的柱子,特点需要首尾加0,不然可能会空栈操作。找到比它小的就代表不能延申.用递减单调栈。

2024-05-22 21:23:19 109

原创 单调栈(下一个更大元素+滴雨水

找出 当前柱子的左边最大值和右边最大值,取最小的再与当前元素的差值即可。双指针比较简单,要先初始化左边界和右边界。用取模的方式来模拟转圈的过程。接雨水(用双指针或者单调栈。下一个更大元素(成环。

2024-05-22 12:22:40 152

原创 单调栈(每日温度

主要需要做一个hash映射,再使用单调栈,单调栈使用是遍历找更大元素的数组。hash来存当前元素和大于这个元素的下一个元素。在Java 6及更高版本中,官方文档建议使用。由于历史原因存在一些性能和线程安全上的问题。

2024-05-21 13:51:34 162

原创 回文子串问题(动态规划

求最长回文子序列的长度,如果i和j指向的数相等则+2,不能则取最大值(i+1,j-1)回文字串三种情况:1 i=j 是 2.i与j相差一个位置是。Dp[i][j]表示i到j是否是回文字串,左闭右闭区间。遍历顺序由递推公式来决定,所以可以画图看看。回文子串(最长回文子序列 ,可以不连续。初始化,i和j相等时为1。回文子串(最长回文字串。

2024-05-21 01:09:29 179

原创 两个字符串的删除操作步数

编辑距离(不变,增加,删除,替换。

2024-05-20 02:53:51 66

原创 不同的子序列

/用末尾这个元素和不用这个元素。/dp[i][j]记录i-1和j-1结尾的不同子序列个数。

2024-05-20 00:11:19 57

原创 最长公共子序列

如果末尾元素相等则+1,不相等则比较 [i-1][j]和[i][j-1]。最长公共子序列,(不连续,两个数组。

2024-05-19 01:06:24 57

原创 最长递增子序列

用二维数组 dp[n1+1][n2+1] 记录以i-1和j-1结尾的数组最长重复子数组,可简便初始化。用二维数组 dp[n1+1][n2+1] 记录以i-1和j-1结尾的数组最长重复子数组,可简便初始化。Dp[i]表示以第i个数结尾的最长子序列,要这个数大于第j个数才更新,两种情况以第i个数结尾,和以第j个数结尾。或者用二分法,如果res==i,插入位置是末尾,则res++。因为要求连续,如果当前数大于前一个数,所以在前一个dp值的基础上加1即可。

2024-05-18 14:36:17 160

原创 买卖股票的最佳时机(含冷冻期)+含手续费

定义4种状态,0持有 1不持有 2今日卖出3冷冻期(也代表不持有。手续费则在之前的基础上减去fee即可。

2024-05-16 13:08:12 96

原创 股票问题(至多两次购买

k次买卖,两个维度的初始化,第一天买卖初始化,以及dp[0-1]的初始化,这样才能写j的递推。因为i和j都是变量,所以要有两个初始化。

2024-05-11 23:05:50 241

原创 买卖股票的最佳时机

dp[i][0] 表示第i天持有股票所得最多现金,相当于买的价格最低,卖的价格最高。用二维数组表示天数和是否持有,i-1天就持有,或者第i天买入。持有股票状态为0,不持有为1。

2024-05-11 01:44:37 161

原创 打家劫舍问题(线性,环形

环形问题,start相当于遍历nums数组的指针,i相当于遍历dp[] 数组的指针。如果连成环,考虑首元素就不考虑尾元素,考虑尾元素就不考虑首元素。二叉树问题(用后序遍历递推,res[]记录偷与不偷的值。打家劫舍问题(根据递推公式来初始化。偷i和不偷i两种情况。

2024-05-10 00:47:03 302

原创 单词拆分(完全背包问题,字典作为物品,单词作为背包

Dp[i] 为布尔类型 判断是否能组成。

2024-05-09 16:58:47 88

原创 爬楼梯(进阶版 )零钱兑换+完全平方数

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬至多m (1 <= m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。这是一个完全背包问题(可以重复使用所以正向遍历,要用排列数所以要for要颠倒,零钱兑换(求最少硬币数,完全背包问题,可重复使用正序遍历,要求最小值所以先把数组都设为最大值便于更新。

2024-05-08 20:59:54 300

原创 完全背包问题(零钱交换+组合总和

I和j都是从0开始,加一个条件判断语句 ,因为先遍历背包,不知道物品的重量。总结:求有几种方法要注意for顺序,求如何装满的话不用考虑for的顺序。完全背包问题,如果求装满背包有几种方法,都用累加。完全背包问题(物体可以无限使用,正序遍历即可。遍历顺序影响到输出的结果是组合数还是排列数。组合总和(颠倒一下for循环的遍历顺序即可。先物品再背包是组合数,颠倒一下变成排列数。For循环顺序也能交换,装满的话。

2024-05-08 13:24:23 205

原创 最后一块石头的重量 II ,目标和,一和0

目标和(分为两堆数组,正和负,求出正的有多少种组合即可。将石头尽可能分为两堆重量一样的,进行相撞则为0。一和零(相当于是一维数组的思路,二维数组的属性。最后一块石头的重量 II(0-1背包问题。M和n代表,物品的两种属性。

2024-05-08 02:38:55 170

原创 背包问题(一维数组,二维数组,)分割等和字串

背包问题0-1背包(i代表的是0到i任取,有不放i状态和放i状态dp[i][j]表示,背包容量为j,可从i种物品中任选。再回顾一下dp[i][j]的含义:从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。那么可以有两个方向推出来dp[i][j],(所以递归公式: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);使用一维数组(要倒序遍历,保证物品只能添加一次分割等和字串。

2024-05-07 23:39:10 234

原创 整数拆分,不同的二叉搜索树

Dp[i]为这个数拆分后的最大乘积,拆一个数尽可能拆成相同的数,值最大。

2024-04-29 14:10:47 165

空空如也

空空如也

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

TA关注的人

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