刷题笔记
文章平均质量分 60
菜鸟~~
求职意向:C++后台开发
展开
-
31 - 买股票的最佳时机问题
1. 买股票的最佳时机I2. 买股票的最佳时机II3. 最佳买卖股票时机4. 买股票的最佳时机III5. 买股票的最佳时机IV原创 2023-05-09 16:13:05 · 826 阅读 · 1 评论 -
30 - 兑换零钱
本题求钱币最小个数,那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数。所以外层for循环遍历物品,内层for遍历背包或者外层for遍历背包,内层for循环遍历物品都是可以的!不能先遍历背包再遍历物品,如果物品在前,物品只遍历了一轮;而物品在后,物品会遍历多轮,,如下表所示为先遍历背包再遍历物品的结果。原创 2023-05-09 09:53:39 · 231 阅读 · 0 评论 -
11 -分割回文串&回文子串&最长回文子串
1. 分割回文串2. 分割回文串II3. 回文子串4. 最长回文子串原创 2023-03-16 17:29:04 · 395 阅读 · 0 评论 -
13 - 岛屿问题
岛屿问题1. 岛屿的周长2. 岛屿的数量3. 岛屿的最大面积我们所熟悉的 DFS(深度优先搜索)问题通常是在树或者图结构上进行的。而这篇博客的这三道题是在「网格」结构中进行的DFS。原创 2023-03-20 11:27:39 · 222 阅读 · 0 评论 -
29 - 打家劫舍问题
1. 打家劫舍I2. 打家劫舍II3. 打家劫舍III(1) 暴力递归超时(2) 记忆化搜索超时(3) 动态规划原创 2023-05-08 17:26:03 · 652 阅读 · 0 评论 -
28 - 最长公共子序列
这道题是最终要返回该序列而不是长度,相比于上一题,在构造表的同时要以另一个二维矩阵记录上面状态转移时选择的方向,我们用1表示来自左上方,2表示来自上边,3表示来自左边。获取这个序列的时候,根据从最后一位开始,根据记录的方向,不断递归往前组装字符,,因为这种情况是动态规划中两个字符相等的情况,字符相等才可用。动态规划:dp数组初始化为0,递推公式为。原创 2023-05-08 09:56:47 · 189 阅读 · 0 评论 -
27 - 两数、三数、四数问题
1. 两数之和2. 三数之和3. 最接近的三数之和4. 四数之和5. 四数相加原创 2023-05-08 09:17:34 · 331 阅读 · 0 评论 -
26 - 栈相关问题
【代码】26 - 栈相关问题。原创 2023-05-07 17:54:39 · 105 阅读 · 0 评论 -
25 - 回文串问题
1. 回文子串法一:动态规划法二:双指针法2. 最长回文子串方法一:动态规划法方法二:双指针法3. 最长回文子序列原创 2023-04-17 11:31:30 · 190 阅读 · 0 评论 -
24 - LRU缓存
请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。示例。原创 2023-04-10 15:28:29 · 84 阅读 · 0 评论 -
23 - x的平方根,快速幂,超级次方
1. x的平方根2. 快速幂3. 超级次方原创 2023-04-06 20:01:02 · 459 阅读 · 0 评论 -
22 - 二叉树(四)
我们可以用哈希表存储所有节点的父节点,然后我们就可以利用节点的父节点信息从 p 结点开始不断往上跳,并记录已经访问过的节点,再从 q 节点开始不断往上跳,如果碰到已经访问过的节点,那么这个节点就是我们要找的最近公共祖先。可以直接利用二叉搜索树的性质,从根节点开始访问,访问到节点的值在p和q之间则是最近公共祖先。时间复杂度O(n),空间复杂度O(n)时间复杂度O(n),空间复杂度O(n)原创 2023-03-27 15:41:25 · 513 阅读 · 0 评论 -
21 - 二叉树(三)
1. 二叉树的镜像2. 判断是不是完全二叉树3. 完全二叉树的节点个数4. 判断是不是平衡二叉树原创 2023-03-24 16:38:37 · 236 阅读 · 0 评论 -
20 - 二叉树(二)
1. 按之字形顺序打印二叉树2. 二叉树中和为某一值的路径3. 二叉搜索树与双向链表原创 2023-03-23 20:16:50 · 185 阅读 · 0 评论 -
19 - 爬楼梯问题
同样地当前状态依赖的是前三个状态,可以用递归/动态规划,因为递归会重复计算,所以使用动态规划,就不难写出如下代码。如果这道题目改成可以爬1或2或3个台阶,问有多少种不同的方法可以爬到楼顶?这道题其实都是当前状态依赖前两个状态,可以做空间上的优化。这道题和斐波那契数列一样,使用动态规划来解决。时间复杂度O(n),空间复杂度O(n)时间复杂度O(n),空间复杂度O(1)时间复杂度O(n),空间复杂度O(n)时间复杂度O(n),空间复杂度O(1)进阶:打印经过的路径。原创 2023-03-23 15:41:46 · 90 阅读 · 0 评论 -
18 - 二分查找相关题目
1. 二维数组中的查找2. 寻找峰值方法一:寻找最大值方法二:二分法3. 旋转数组的最小数字原创 2023-03-22 17:28:36 · 164 阅读 · 0 评论 -
17 -删除有序链表中的重复元素
由于给定的链表是排好序的,因此重复的元素在链表中出现的位置是连续的,因此我们只需要对链表进行一次遍历,就可以删除重复的元素。由于链表的头节点可能会被删除,因此我们需要额外使用一个节点(newHead)指向链表的头节点。具体地,我们让指针 cur 指向链表的newHead来添加节点,对链表head进行遍历。需要注意head和head->next可能为空的处理。时间复杂度O(n),空间复杂度O(1)原创 2023-03-22 15:38:25 · 728 阅读 · 0 评论 -
16 - 单链表排序&链表相加
上述过程可以通过递归实现。递归的终止条件是链表的节点个数小于或等于 1,即当链表为空或者链表只包含 1 个节点时,不需要对链表进行拆分和排序。使用辅助数组,时间复杂度O(nlogn),空间复杂度O(n)时间复杂度O(nlogn),空间复杂度O(1)原创 2023-03-22 10:45:09 · 228 阅读 · 0 评论 -
15 - 模拟栈&队列
思路:按照上面的思路,我们只需要设计一个数据结构,使得每个元素与其相应的最大值时刻保持一一对应。因此我们可以使用一个辅助栈,与元素栈同步插入与删除,用于存储与每个元素对应的最大值。时间复杂度O(1),空间复杂度O(n)原创 2023-03-21 19:07:53 · 70 阅读 · 0 评论 -
14 - 牛牛吃草
简单dp,dp[i]表示当前在i位置的最大值。注意答案不是dp[n],因为最大的情况不一定可以走到n这个位置。时间复杂度O(n^2)原创 2023-03-21 15:51:54 · 98 阅读 · 0 评论 -
12 - 递增序列问题
1. 最长连续递增序列2. 最长递增子序列3. 最长递增子序列的个数原创 2023-03-17 10:52:49 · 755 阅读 · 0 评论 -
10 - 二叉树(一)
深度优先搜索&BST1. 验证二叉搜索树2. 将有序数组转为二叉搜索树3. 有序链表转为二叉搜索树4. 将二叉搜索树变平衡原创 2023-03-15 15:53:00 · 223 阅读 · 0 评论 -
9-求交集问题
1. 两个数组的交集2. 两个数组的交集II3. 查找共用字符原创 2023-03-13 15:53:58 · 110 阅读 · 0 评论 -
8-重排链表 & 链表奇偶重排&判断链表是否为回文
1. 重排链表方法一:数组模拟方法二:双向队列模拟方法三:直接分割链表2. 链表的奇偶重排方法一:利用辅助数组方法二:双指针3. 判断一个链表是否为回文结构原创 2023-03-13 11:06:37 · 325 阅读 · 0 评论 -
7 - IP地址
1. IP地址无效化2. 验证IP地址3. 复原IP地址原创 2022-12-16 15:20:58 · 138 阅读 · 0 评论 -
6 - 寻找右区间
给你一个区间数组 intervals ,其中 intervals[i] = [starti, endi] ,且每个 starti 都不同 。区间 i 的右侧区间可以记作区间 j ,并满足 startj >= endi ,且 startj 最小化 。返回一个由每个区间 i 的右侧区间在 intervals 中对应下标组成的数组。如果某个区间 i 不存在对应的右侧区间 ,则下标 i 处的值设为 -1 。排序+二分法排序+双指针法原创 2022-05-20 21:05:50 · 297 阅读 · 0 评论 -
5 - 数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。比如:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2利用哈希表实现,但是需要O(n)的辅助空间时间复杂度为O(n),空间复杂度为O(n)class Solution {public: int majorityElement(vector<int>& nums) { unordered_map&l原创 2022-04-14 20:57:32 · 314 阅读 · 0 评论 -
4 - 替换空格
替换空格:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。例如:输入:s = “We are happy.” 输出:“We%20are%20happy.”我们首先需要问清楚面试官的需求,假设让我们在原来的字符串上进行替换,并且保证输入的字符串后面有足够多的空间。思路:可以先遍历一次字符串,这样就能统计出字符串中空格的总数,并且可以由此计算出替换之后字符串的总长度。然后从字符串后面开始复制和替换。首先准备两个指针p1和p2,p1指向原字符串末尾,p2指向替换之后字符串末尾,接下来移原创 2022-04-07 21:12:40 · 317 阅读 · 0 评论 -
3 - 数组中数字出现的次数
数组中数字出现的次数给你一个整数数组 nums ,除某个元素仅出现 一次外,其余每个元素都恰出现三次 。请你找出并返回那个只出现了一次的元素。原创 2022-04-07 16:39:27 · 938 阅读 · 0 评论 -
2 - 二维数组中的查找
二维数组中的查找:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。原创 2022-04-07 15:46:58 · 250 阅读 · 0 评论 -
1 - 数组中重复的数字
题目描述:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如:输入:[2, 3, 1, 0, 2, 5, 3],输出:2 或 3 。原创 2022-04-07 11:35:40 · 322 阅读 · 0 评论