自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营day34

343.整数拆分 (可跳过)62.不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?解释: 从左上角开始,总共有 3 条路径可以到达右下角。注意题目中说机器人每次只能向下或者向右移动一步,那么其实。

2024-08-22 05:26:16 1096

原创 代码随想录算法训练营day32

动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的例如:有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。

2024-08-21 17:12:33 808

原创 代码随想录算法训练营day31

例:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。从前向后遍历的话,遇到strNum[i - 1] > strNum[i]的情况,让strNum[i - 1]减一,但此时如果strNum[i - 1]减一了,可能又小于strNum[i - 2]。即intervals[i]的左边界 <= intervals[i - 1]的右边界,则一定有重叠。

2024-08-21 16:11:31 391

原创 代码随想录算法训练营day30

在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。但仔细思考一下就发现:如果把气球排序之后,从前到后遍历气球,被射过的气球仅仅跳过就行了,没有必要让气球数组remove气球,只要记录一下箭的数量就可以了。如果真实的模拟射气球的过程,应该射一个,气球数组就remove一个元素,这样最直观,毕竟气球被射了。给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。

2024-08-21 15:47:49 658

原创 代码随想录算法训练营day29

如果 ratings[i] > ratings[i + 1],此时candyVec[i](第i个小孩的糖果数量)就有两个选择了,一个是candyVec[i + 1] + 1(从右边这个加1得到的糖果数量),一个是candyVec[i](之前比较右孩子大于左孩子得到的糖果数量)。如果ratings[i] > ratings[i - 1] 那么[i]的糖 一定要比[i - 1]的糖多一个,所以贪心:candyVec[i] = candyVec[i - 1] + 1。你从其中的一个加油站出发,开始时油箱为空。

2024-08-19 23:43:44 959

原创 代码随想录算法训练营day28

给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。每天的利润序列:(prices[i] - prices[i - 1]).....(prices[1] - prices[0])你的目标是使用最少的跳跃次数到达数组的最后一个位置。判断你是否能够到达最后一个位置。

2024-08-15 00:03:40 912

原创 代码随想录算法训练营 Day27

贪心的本质是选择每一阶段的局部最优,从而达到全局最优。刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。

2024-08-13 20:56:21 1007

原创 代码随想录算法训练营 Day25

给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。本题求自增子序列,是不能对原数组进行排序的,排完序的数组都是自增子序列了,给定一个 没有重复 数字的序列,返回其所有可能的全排列。用for循环暴力把结果搜索出来,全排列。332.重新安排行程(可跳过)332.重新安排行程(可跳过)51.N皇后(适当跳过)37.解数独(适当跳过)

2024-08-12 21:53:05 245

原创 代码随想录算法训练营 Day24

例如:"0.1.2.201" 和 "192.168.1.1" 是 有效的 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效的 IP 地址。示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]子集是一种组合问题,因为它的集合是无序的,子集{1,2} 和 子集{2,1}是一样的。

2024-08-11 23:33:14 224

原创 代码随想录算法训练营 Day23

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。本题没有组合数量要求,仅仅是总和的限制,递归没有层数的限制,只要选取的元素总和超过target就返回。candidates 中的每个数字在每个组合中只能使用一次。candidates 中的数字可以无限制重复被选取。

2024-08-09 22:46:08 233

原创 代码随想录算法训练营 Day22

回溯法也可以叫做回溯搜索法,它是一种搜索的方式,回溯是递归的副产品,只要有递归就会有回溯,回溯函数也就是递归函数,指的都是一个函数。

2024-08-08 20:00:35 518

原创 代码随想录算法训练营 Day21

的时候直接return NULL。108.将有序数组转换为二叉搜索树。538.把二叉搜索树转换为累加树。分割点就是数组中间位置的节点。669. 修剪二叉搜索树。669. 修剪二叉搜索树。

2024-08-07 22:57:50 200

原创 代码随想录算法训练营 Day20

因为是有序树,所以 如果 中间节点是 q 和 p 的公共祖先,那么 中节点的数组 一定是在 [p, q]区间的。即 中节点 > p && 中节点 < q 或者 中节点 > q && 中节点 < p。利用回溯从底向上搜索,遇到一个节点的左子树里有p,右子树里有q,那么当前节点就是最近公共祖先。遍历二叉搜索树,找到空节点,插入元素。235. 二叉搜索树的最近公共祖先。235. 二叉搜索树的最近公共祖先。701.二叉搜索树中的插入操作。450.删除二叉搜索树中的节点。

2024-08-06 04:03:16 347

原创 代码随想录算法训练营 Day18

二叉搜索树采用中序遍历,其实就是一个有序数组,二叉搜索树转换成有序数组,然后遍历一遍数组,就统计出来最小差值了。530.二叉搜索树的最小绝对差。530.二叉搜索树的最小绝对差。236. 二叉树的最近公共祖先。501.二叉搜索树中的众数。

2024-08-03 23:56:46 287

原创 代码随想录算法训练营 Day17

700.二叉搜索树中的搜索。98.验证二叉搜索树。

2024-08-02 21:19:35 94

原创 代码随想录算法训练营 Day16

【代码】代码随想录算法训练营 Day16。

2024-08-02 20:04:19 202

原创 代码随想录算法训练营 Day15

从中序与后序遍历序列构造二叉树。

2024-08-01 20:19:28 219

原创 代码随想录算法训练营 Day14

递归法,比较左右节点,左节点的左孩子右节点的右孩子,左节点的右孩子右节点的左孩子。比较根节点的左子树与右子树是不是相互翻转。可以前后遍历,不能中序遍历(交换后重复。左右孩子都为空的才是叶子节点。104.二叉树的最大深度。111.二叉树的最小深度。最小深度是从根节点到最近。的最短路径上的节点数量,101. 对称二叉树。

2024-07-31 18:40:42 189

原创 代码随想录算法训练营 Day13

迭代遍历。

2024-07-29 21:44:46 268

原创 代码随想录算法训练营 Day 11, 150. 逆波兰表达式求值

347.前 K 个高频元素。150. 逆波兰表达式求值。347.前 K 个高频元素。239. 滑动窗口最大值。

2024-07-28 21:12:58 222

原创 代码随想录算法训练营 Day 10,第五章 栈与队列part01,232.用栈实现队列,225. 用队列实现栈,20. 有效的括号, 1047. 删除字符串中的所有相邻重复项

栈与队列理论基础栈与队列理论基础栈提供push 和 pop 等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。不像是set 或者map 提供迭代器iterator来遍历所有元素。所以STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器)。那么问题来了,STL 中栈是用什么容器实现的?从下图中可以看出,栈的内部结构,栈的底层实现可以是vector,deque,list 都是可以的, 主要就是数组和链表的底层实现。

2024-07-26 23:59:45 230

原创 代码随想录算法训练营 Day 9,151.翻转字符串里的单词,卡码网:55.右旋转字符串,字符串总结,双指针回顾

151.翻转字符串里的单词151.翻转字符串里的单词将整个字符串都反转过来,那么单词的顺序指定是倒序了,只不过单词本身也倒序了,那么再把单词反转一下,单词不就正过来了。举个例子,源字符串为:"the sky is blue "使用整体反转+局部反转就可以实现反转单词顺序的目的。

2024-07-25 21:40:49 237

原创 代码随想录算法训练营 Day 8,344.反转字符串,541. 反转字符串II,卡码网:54.替换数字

对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。因为字符串也是一种数组,所以元素在内存中是连续分布,这就决定了反转链表和反转字符串方式上还是有所差异的。反转字符串依然是使用双指针的方法,只不过对于字符串的反转,其实要比链表简单一些。这个库函数仅仅是解题中的一部分, 所以这里使用库函数也是可以的。

2024-07-24 23:23:06 280

原创 代码随想录算法训练营 Day 7,454.四数相加II,383. 赎金信, 15. 三数之和,18. 四数之和

因为题目说只有小写字母,那可以采用空间换取时间的哈希策略,用一个长度为26的数组来记录magazine里字母出现的次数。然后再用ransomNote去验证这个数组是否包含了ransomNote所需要的所有字母。依然是数组在哈希法中的应用。

2024-07-23 21:31:45 312

原创 代码随想录算法训练营 Day 6,哈希表理论基础 ,242.有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和

例如冲突的位置,放了小李,那么就向下找一个空位放置小王的信息。这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。拉链法就是要选择适当的哈希表的大小,这样既不会因为数组空值而浪费大量内存,也不会因为链表太长而在查找上浪费太多时间。哈希函数,把学生的姓名直接映射为哈希表上的索引,然后就可以通过查询索引下标快速知道这位同学是否在这所学校里了。,而且这道题目中字符串只有小写字符,那么就可以定义一个数组,来记录字符串s里字符出现的次数。

2024-07-22 21:26:08 444

原创 代码随想录算法训练营 Day 4,24. 两两交换链表中的节点 ,19. 删除链表的倒数第N个节点 ,面试题 02.07. 链表相交,142.环形链表II

题目链接/文章讲解/视频讲解:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。19.删除链表的倒数第N个节点。

2024-07-20 21:46:24 203

原创 代码随想录算法训练营 Day 3,链表理论基础, 203.移除链表元素,707.设计链表, 206.反转链表

链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。为什么要保存一下这个节点呢,因为接下来要改变 cur->next 的指向了,将cur->next 指向pre ,此时已经反转了第一个节点了。之前链表的头节点是元素1, 反转之后头结点就是元素5 ,这里并没有添加或者删除节点,仅仅是改变next指针的方向。:每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。203.移除链表元素。

2024-07-19 21:04:29 260

原创 代码随想录算法训练营 Day 2,977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

定义一个新数组result,和nums数组一样的大小,让j指向result数组终止位置。数组平方的最大值在数组的两端,使用双指针法,l指向起始位置,r指向终止位置。每个数平方之后,排序。

2024-07-18 21:18:02 346

原创 代码随想录算法训练营 Day 1,数组理论基础,704. 二分查找,27. 移除元素

数组可以方便的通过下标索引的方式获取到下标对应的数据。右移>>,运算结果正好能对应一个整数的二分之一值,这就正好能代替数学上的除2运算,但是比除2运算要快。mid=(left+right)>>1相当于mid=(left+right)/2。

2024-07-17 22:13:14 401

空空如也

空空如也

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

TA关注的人

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