最长上升子序列
const int N = 1010; // 定义数组最大长度 int n; // 输入的序列长度 int a[N], f[N]; // a数组存储输入序列,f数组存储动态规划状态 int main() { scanf("%d", &n); // 读入序列长度 // 读入序列中的每个数 for (int i =...
const int N = 1010; // 定义数组最大长度 int n; // 输入的序列长度 int a[N], f[N]; // a数组存储输入序列,f数组存储动态规划状态 int main() { scanf("%d", &n); // 读入序列长度 // 读入序列中的每个数 for (int i =...
算法思路 我的核心问题:怎么想到用二维数组dp[i][j]表示的?我只能想到用一维的dp[i],但是很不好实现 答: 0-1背包问题属于“决策”+“有限资源(背包容量)”的模式。 之所以用二维数组 dp[i][j],是因为 0-1 背包问题需要同时考虑 “物品数量” 和 “背包容量” 两个维度, 这两个维度都会影响我们的决策,所以dp数组自然是二维的。 ...
(1)Better Soulutions ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* dummyHead = new ListNode(0); ListNode* tail = dummyHead; //进位数 int carry = 0; ...
1# 报错:member acces within null pointer 这个报错的意思是当前指针有可能为空指针,但你却把它默认当成非空指针,导致运行时错误。 要解决这个问题,你需要先检查 head 是否为 nullptr(即链表是否为空),或者 head->next 是否为 nullptr(即链表中只有一个节点,无法进行交换) // 检查链表是否为空或只有一个节点 ...
to_string converting int to string #include <string> //remember to include the <string> headfile! using namespace std; string s = to_string(42); #stoi convert string to int stoi( s...
描述 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 思路–中序遍历 观察可知,如上图,中序遍历的访问顺序 刚好是 二叉搜索树从小到大递增的顺序,所以我们把中序遍历到的结点值都添加到一个数...
题目要求 给定二叉搜索树(BST)的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。 方法1:递归 二叉搜索树的性质 左子树所有节点的元素值均小于根的元素值; 右子树所有节点的元素值均大于根的元素值。 算法 若 root 为空则返回空节点; 若 val=root.val,则返回 r...
层序遍历,在最后一个vec取第一个元素即可 //BFS这棵二叉树,先把右儿子入队,再把左儿子入队.最后一个出队的节点就是左下角的节点 class Solution { public: int findBottomLeftValue(TreeNode *root) { TreeNode *node; queue<TreeNode *> ...
int sumOfLeftLeaves(TreeNode* root) { int n=0; if(root){ //如果root的左孩子存在,且是叶子节点,则加上它的值 if(root->left&&root->left->left**nullptr&&root->le...
方法1:## 深度优先搜索DFS(递归版) class Solution { public: vector<string> binaryTreePaths(TreeNode* root) { vector<string> res; // 存储结果路径 dfs(root, "", res); // 调用辅助函数 return res; } ...