随笔分类 - leetcode
摘要:题目来源 Full Binary Tree Description In computer science,a binary tree is a tree data structure in which each node has at most two children. Consider an
阅读全文
摘要:题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路:通过多次画图可以总结出来普遍的数学规律。假如我们要找结点b的中序遍历的下一个结点。根据中序遍历的特点,先访问b的左子树,然后访问结点b,最后访问b的右子
阅读全文
摘要:300. 最长递增子序列 思路与方法 定义$dp[i]$为考虑前i个元素,以第i个元素为结尾的最长上升子序列的长度。nums[i]必须包含 我们从小到大计算$dp$数组的值。在计算$dp[i]$之前, 假设我们已经计算出了$dp[0 \dots i-1]$的值,则状态转移方程为: \(dp[i] =
阅读全文
摘要:304. 二维区域和检索 - 矩阵不可变 解题思路: 这道题目很显然不能够用暴力解法。但是一时间想不到更好的办法。 想起昨天一道类似的区域求和问题,我用的是前缀和的方法解决的。 这道题目是二维的,可以用前缀和的方法吗? 首先直接对二维数组进行前缀和统计肯定是困难的。那么我尝试将二维数组转换为一维数组
阅读全文
摘要:剑指 Offer 05. 替换空格 解题方法 首先遍历字符串,统计出字符串中空格的总数 spaceNum 扩充字符串的长度。设立两个指针,根据数学规律进行后移复制。 class Solution { public: string replaceSpace(string s) { int spaceN
阅读全文
摘要:剑指 Offer 04. 二维数组中的查找 当我们需要解决一个复杂的问题时,一个有效的办法就是从一个具体的问题入手,通过分析简单具体的例子,试图寻找普遍的规律。针对 这个问题,我们也不妨从一个具体的例子入手。 | 1 | 2 | 8 | 9 | | | | | | | 2 | 4 | 9 | 12
阅读全文
摘要:不修改数组找出重复的数字 解题思想 题目要求不能修改输入的数组,我们可创建一个长度为n+1的辅助数组,逐一复制,我们就很容易发现哪个数字重复了。 由于需要创建一个数组,该方案需要O(N)的辅助空间。 接下来我们尝试避免使用O(n)的辅助空间。为什么数组中会出现重复数字。因为限定了范围的缘故。 好比有
阅读全文
摘要:剑指 Offer 03. 数组中重复的数字: 方法一:利用空间换时间。哈希表 class Solution { public: int findRepeatNumber(vector<int>& nums) { vector<int> hashNum; int ans; int len = nums
阅读全文
摘要:解码方法 这道题目我考虑到了使用动态规划,但是考虑的不全面。 算法分析 分析: 本题利用动态规划解决,但是需要注意分情况讨论 dp[i] 为str[0……i]的译码方法总数 分情况讨论: (极端情况)若s[i] = '0',那么若s[i-1] = '1' or '2',则dp[i] = dp[i-1
阅读全文
摘要:反转链表 II 解题思路 反转链表,首先我简单回忆了一下递归逆置链表的算法,大概有些忘了,但是稍微调整一下好像可以了。 递归逆置链表的算法思想是:根据链表一直往下next,这样可以找到最后的那个结点。这个结点也就是新的首元结点。用一个变量记录下来。 然后往上回溯,回溯的过程不停的 返回首元结点,然后
阅读全文
摘要:Power(x,n) 解题思路 思路一:for循环迭代。 代码比较简单,就不贴出来了。结果很显然超时。 思路二:快速幂 代码超时之后猛然想起来之前学过一招制敌的方法,但是一时想不起来名字。只好百度 快速幂算法的思想可以总结为下面的数学公式 思路比较简单,其实是二分的思路。但是如果之前没有相应的思维训
阅读全文
摘要:题目链接:最小路径和 解法一:深度优先搜索 class Solution { int sum = INT_MAX; int m,n; public: int minPathSum(vector<vector<int>>& grid) { m = grid.size(); n = grid[0].si
阅读全文
摘要:题目链接:最大子序和 假设 \(nums\) 的数组长度是 \(n\),下标从 $0$ 到 $1$。 我们用 \(a_{i}\) 代表 \(nums[i]\) ,用 $dp[i]$代表以第$i$个数结尾的【连续子数组的最大和】,那么很显然我们要求的答案就是: \(max{dp[i]} 0 \leq
阅读全文
摘要:题目链接:按摩师 方法一:设计二维状态变量 第一步:设计状态 【状态】这个词可以理解为 【记录了求解问题到了哪一个阶段】。 由于当前这一天按摩师有两种选择:(1)接预约;(2)不接预约。但根据题意,今天是否接预约,是受到昨天影响的。为了消除这种影响,我们在状态数组要设置这个维度。 dp[i][0]
阅读全文
摘要:题目链接:下一个更大元素 I 参考leetcode官方题解 我们可以忽略数组nums1,直接将nums2中的每个元素进行求解,求出其下一个更大的元素。利用map映射,将答案保存在“字典”中。随后便利nums2的子集(nums1),直接输出答案即可。 对于nums2,我们可以使用单调栈来解决这个问题
阅读全文
摘要:题目链接:链表中的下一个更大节点 O(N^2)的一种写法。 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), ne
阅读全文
摘要:题目链接:链表组件 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
阅读全文
摘要:题目链接:分隔链表 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
阅读全文
摘要:题目链接:排序链表 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode
阅读全文
摘要:题目链接:旋转链表 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
阅读全文

浙公网安备 33010602011771号