自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录Day34|贪心算法|134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列

【代码】代码随想录Day34|贪心算法|134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列。

2025-02-11 00:59:58 1477

原创 代码随想录Day33|贪心算法|122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II、1005.K次取反后最大化的数组和

从覆盖范围出发,不管怎么跳,覆盖范围内一定是可以跳到的,以最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最少步数!需要统计两个覆盖范围,当前这一步的最大覆盖和下一步最大覆盖。如果移动下标达到了当前这一步的最大覆盖最远距离了,还没有到终点的话,那么就必须再走一步来增加覆盖范围,直到覆盖范围覆盖了终点。如果某天价格比前一天高,则可以视为当天卖出前一天买入的利润。多次交易的总利润等价于每天的上涨差值之和。由于没有限制交易次数,可以尽可能利用价格上涨的区间获利。

2025-02-10 00:24:44 1545

原创 代码随想录Day27|二叉树|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

递归地对左半部分和右半部分分别进行相同的操作,选择中间元素作为该部分的根节点,依此类推,直到遍历整个数组。例如,选择中间元素作为根节点,可以使得左子树包含数组左半部分的元素,右子树包含右半部分的元素。为了保证生成的二叉搜索树是平衡的,先利用排序数组的中间元素作为根节点,然后递归构建左右子树。在递归过程中,我们不断通过中间元素创建新的树节点,并将其左右子树连接起来,最终返回根节点。对于一个排序好的数组,选择数组的中间元素作为根节点,可以保证左右子树的节点数量相对平衡。

2025-02-04 00:31:23 348

原创 代码随想录Day18|二叉树|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

二叉搜索树 的中序遍历能够以递增顺序访问所有节点值。因此,两个相邻节点的差值是局部最小值。只需要逐个比较中序遍历中相邻节点的差值,找到最小差即可。

2025-01-26 01:16:16 320

原创 代码随想录Day17|二叉树|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

如果 root1 和 root2 都不为 null,我们创建一个新的节点,其值为 root1.val + root2.val,表示对应节点值的相加结果。二叉搜索树的特点是:对于任意一个节点 root,其左子树中所有节点的值都小于 root.val,右子树中所有节点的值都大于 root.val。如果发现当前节点值 root.val 小于等于 max,则树不是有效的二叉搜索树。当节点为 null 时,返回 true,表示空树是有效的二叉搜索树。每次递归处理完当前节点后,返回新创建的树的根节点。

2025-01-25 01:09:10 828

原创 代码随想录Day16|二叉树|513.找树左下角的值、112. 路径总和、106.从中序与后序遍历序列构造二叉树

以后序数组的最后一个元素为切割点,先切中序数组,根据中序数组,反过来再切后序数组。一层一层切下去,每次后序数组最后一个元素就是节点元素。,只需要记录最后一行第一个节点的数值。

2025-01-24 01:17:30 340

原创 代码随想录Day15|二叉树|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数

本题要求从根节点到叶子的路径,所以需要前序遍历,这样才方便让父节点指向孩子节点,找到对应的路径。如果递归向左遍历的深度等于递归向右遍历的深度,那说明就是满二叉树,如果递归向左遍历的深度不等于递归向右遍历的深度,则说明不是满二叉树.左叶子节点:节点A的左孩子不为空,且左孩子的左右孩子都为空(说明是叶子节点),那么A节点的左孩子为左叶子节点。判断当前节点是不是左叶子是无法判断的,必须要通过节点的父节点来判断其左孩子是不是左叶子。完全二叉树只有两种情况,情况一:就是满二叉树,情况二:最后一层叶子节点没有满。

2025-01-23 01:20:57 695

原创 代码随想录Day14|二叉树|226.翻转二叉树、101.对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度

因为要先处理孩子节点的信息后返回给父节点,所以要采用后序遍历的方式。(递归的中序遍历无法实现,因为中序遍历交换根节点的两个子节点后,递归遍历右子树时其实还是原来的左子树。二叉树的最大深度就是根节点的高度,可以利用二叉树的后序遍历求解根节点的高度,即二叉树的最大深度。使用后序遍历,求根节点到叶子节点的最小距离,就是求高度的过程,不过这个最小距离也同样是最小深度。题目定义最小深度是从根节点到最近叶子节点的最短路径上的节点数量。层序遍历,将每一层节点的左右子节点进行交换,也可以实现。

2025-01-22 00:48:07 767

原创 代码随想录Day13|二叉树|递归遍历、层序遍历

二叉树的层序遍历利用队列先进先出的特点进行二叉树的层序遍历,先将根节点加入队列中,弹出一个节点,则将此节点的左右子节点(非空)都加入队列中。注意:需要控制每一层弹出节点的数量。

2025-01-21 01:11:38 338

原创 代码随想录Day09|151.翻转字符串里的单词、KamaCoder55.右旋转字符串、28.实现 strStr()、459.重复的子字符串

题目。

2025-01-20 01:22:28 571

原创 代码随想录Day11|150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素

/弹出元素时,比较当前要弹出的数值是否等于队列出口的数值,如果相等则弹出//同时判断队列当前是否为空if(!//添加元素时,如果要添加的元素大于入口处的元素,就将入口元素弹出//保证队列元素单调递减//比如此时队列元素3,1,2将要入队,比1大,所以1弹出,此时队列:3,2while(!//队列队顶元素始终为最大值//存放结果元素的数组//自定义队列//先将前k的元素放入队列i<k;

2025-01-19 00:35:45 311

原创 代码随想录Day10|栈和队列|232.用栈实现队列、225. 用队列实现栈、20. 有效的括号、1047. 删除字符串中的所有相邻重复项

可以在元素入队时进行处理,使元素逆置,以完成先进后出,需要一个队列q作主要存储空间,一个队列temp作临时空间。入栈前检查当前元素与栈顶元素是否一致,一致则弹出栈顶元素,不一致则当前字符入栈。数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能。另一种写法,用StringBuilder修改字符串,速度更快。遇到右括号时,比较当前元素与栈顶元素是否一致来判断是否匹配,队列先进先出,栈先进后出,用栈模拟队列需要准备两个栈,遇到左括号时,将对应的右括号入栈,遍历字符串,字符依次入栈,

2025-01-18 00:58:33 416

原创 代码随想录Day08|字符串|344.反转字符串、541.反转字符串II、KamaCoder54.替换数字

定义两个指针,分别从字符串最左侧和最右侧向中间移动,同时交换元素,两指针相遇时说明反转完毕。数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能。将字符串每2k个元素分为一组,组内进行反转操作。

2025-01-16 00:25:49 422

原创 代码随想录Day07|哈希表|454.四数相加II、383.赎金信、15.三数之和、18.四数之和

首先将数组排序,饭后一层for循环,让i从下标为0的地方开始遍历,同时定义下标left=i+1,right=length-1,寻找a+b+c,其中a=nums[i],b=nums[left],c=nums[right]。然后两层for循环遍历nums3和nums4,令当前nums3中元素为i,nums4中元素为j,若此时map中存在值为-(i+j)的元素,则说明当前取出的四个数组中的元素满足条件,统计数目加一。首先定义一个哈希数组,遍历magazine字符串,每个字符在哈希数组中对应位置加一,

2025-01-15 00:39:18 803

原创 代码随想录Day06|哈希表|242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

题目说两个数组s、t中只有小写字母,故可以定义一个数组record[26]用来上记录字符串里字符出现的次数,字符a到字符z的ASCII码是26个连续的数值,故字符a下标为0,字符z映射为下标25。字符串的第s[i] - ‘a’ 个所在的元素的ASCII码取值范围为0~25,在遍历字符串s时,将 s[i] - ‘a’ 所在的元素做+1,统计字符串s中26个字符出现的次数。,可将元素的值与元素的下标视作一组键值对,key存元素值,value存下标,用map储存。(判断元素是否被遍历过),又要取元素的。

2025-01-14 00:05:40 1731

原创 代码随想录Day04|链表|24.两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07.链表相交、142.环形链表II

让双指针一个指向链表头,一个指向快慢指针找到的在环中的一个节点,开始遍历链表。两个指针,从表头出发,使fast指向null时slow指向倒数第n+1个节点(null视作倒数第0个节点),则。题目要求实现链表节点的两两交换,可以将链表从头节点开始两两分为一组(后文中,节点对的。为方便操作,将空链表和单节点链表的情况单独处理,其余情况则在头节点前添加虚拟节点。如果链表中有环,则快指针一定会在环中的某个节点追上慢指针(可理解为追及问题)快指针一次走两个节点,慢指针一次走一个节点。个节点,即待删节点的前驱。

2025-01-11 23:56:26 770

原创 代码随想录Day03|链表|203.移除链表元素、707.设计链表、206.反转链表

本题用于整理Java中的链表定义及常见操作,操作包括:获取链表第index个节点的数值、在链表的最前面插入一个节点、在链表的最后面插入一个节点、在链表第index个节点前面插入一个节点、删除链表的第index个节点。,其节点被存储在堆空间中,所以每个节点的“指针”在Java中指的是他所引用的下一个对象在堆空间中的地址。),需要注意的是,在发生修改之前,需要先保存当前节点的后继,防止因next指针修改造成的节点丢失。本题要求反转链表,可以在每两个节点之间实现next指针的反转(头节点需指向。

2025-01-10 23:30:51 624

原创 代码随想录Day02|LeetCode209.长度最小的子数组、LeetCode59.螺旋矩阵、KamaCoder58.区间和、KamaCoder44.开发商购买土地

两个索引来将元素框在其中,在改变终止位置的同时让起始位置做出对应的改变,实现窗口的滑动,从而得到符合要求的结果。就是满足的连续子数组,但不一定是最小的,所以要继续找,直到找到最小的为止。本题要求从外圈到内圈顺时针填充矩阵,模拟图如下。开始后移直至数组中最后一个元素,在循环体中,元素为正整数,则相加的和越来越大,即是。为避免双重for循环暴力求解,可以把求。的最小子数组,可以使用滑动窗口。定义一个f循环体,终止位置从。题目要求寻找元素和大于等于。中元素递增的,故只需要求。数组中的元素是递增的。

2025-01-10 00:45:35 789

原创 代码随想录Day01|数组|704.二分查找、27.去除元素、977.有序数组的平方

leetcode704.二分查找、leetcode27.去除元素、leetcode977.有序数组的平方

2025-01-09 00:50:37 707

空空如也

空空如也

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

TA关注的人

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