- 2025-01-23代码随想录——动态规划、股票问题
https://www.programmercarl.com/动态规划-股票问题总结篇.html#买卖股票的最佳时机含手续费只能买一次不断更新最小买入值,不断更新profit=prices[i]-buy可以买卖多次动态规划-定义dp数组dp[i][1],dp[i][0]分别表示第i天持有股票时的现金和第i天未持有股票时的现金-递推
- 2025-01-22代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素、977.有序数组的平方
LeetCode7042025-01-2218:30:38星期三代码随想录视频内容简记梳理一下三个比较重要的部分首先是对于整个代码的循环条件,这个很重要判断middle位置在我看来初学也是比较重要一步注意:所有的middle位置判断都是if语句实现的,固定的大于和小于。这个不用纠结一不一样更
- 2025-01-22代码随想录:复原IP地址
这道题倒是不难,但是字符串的一些操作很麻烦。字符串的erase操作,如果单个参数传入的是索引,就会删除对应位置直到结尾的所有字符;如果单个参数传入的是迭代器,就会删除那个对应位置的单个字符。classSolution{public://切割次数,只能切三次inttime=0;stringtarget;
- 2025-01-22代码随想录:分割回文窜
本所谓切割,就是找切割位置,就是组合classSolution{public:vector<string>target;vector<vector<string>>res;vector<vector<string>>partition(strings){rb(s,0);returnres;}voidrb(strings,intst
- 2025-01-21代码随想录:组合总和二
这题说实话有点晕晕乎乎的,最后直接把代码随想录的代码复制过来了。要解决的问题是,尽管用了不同位置的相同元素,但是会产生相同的结果。解决方法是排序后,跳过相同元素。代码随想录那个used数组我属实没看懂,这个方法倒是看懂了。classSolution{private:vector<vector<int
- 2025-01-21代码随想录:组合总和
回溯的本质就是多层for循环嵌套,用于解决不知道有多少层for循环的情况,适当剪枝其实也是for循环里增加限制条件classSolution{public:vector<int>sum;vector<vector<int>>res;vector<vector<int>>combinationSum(vector<int>&candidates,inttarget){
- 2025-01-20代码随想录——动态规划31打家劫舍III(树状DP)
这道题目是打家劫舍III(HouseRobberIII),是打家劫舍系列问题的变种。问题描述如下:小偷发现了一个新的区域,这个区域的所有房屋排列类似于一棵二叉树。如果两个直接相连的房屋在同一晚被打劫,房屋会自动报警。给定这棵二叉树的根节点root,求在不触发警报的情况下,小偷能够盗取的最
- 2025-01-19代码随想录:二叉搜索时的插入
/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left(nullptr),right(nullptr){}*
- 2025-01-19代码随想录:将有序数组转化为二叉搜索树
/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left(nullptr),right(nullptr){}*
- 2025-01-19代码随想录:修剪二叉搜索树
/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left(nullptr),right(nullptr){}*
- 2025-01-19代码随想录:删除二叉搜索树中的节点
由于涉及到树的结构变化,用递归写比较简单,竟然一次跑通了/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(int
- 2025-01-19代码随想录:把二叉搜索树转化为累加树
相当于将数组从右到左遍历,下一个数加上一个数,二叉搜索树中序遍历(左中右)为顺序,右中左则为倒叙/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),rig
- 2025-01-18代码随想录:二叉树的公共祖先
这道题是真巧妙,巧妙有两点不用区分两个目标节点,只要命中了,就往上代码可以处理一个节点本来就是另一个节点祖先的情况/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode(int
- 2025-01-18代码随想录 字符串 test 6(KMP,超详细)
28.找出字符串中第一个匹配项的下标-力扣(LeetCode)一暴力: 以主串中的每个字符为起点,每次匹配从当前主串的起点和子串的首位开始匹配:匹配成功:返回本次匹配的主串起点。匹配失败:以主串的下一个字符作为新起点,重新尝试匹配。时间复杂度为o(m*n)(m为主串长度,n
- 2025-01-17【代码随想录】刷题记录(105)-打家劫舍
题目描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况
- 2025-01-17【代码随想录】刷题记录(103)-整数拆分
题目描述:给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k>=2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。 示例1:输入:n=2输出:1解释:2=1+1,1×1=1。示例 2:输入:n=10输出:36解释:10=3+3+4,3× 3× 4=
- 2025-01-17代码随想录 字符串 test 3
54.替换数字(第八期模拟笔试) 为了不使用额外的空间,采用双指针,通过用旧指针遍历原数组计算出数字个数,进而计算出新数组应有的大小,然后新指针指向新数组的最后,此时新,旧指针都位于两数组的末尾,同时从后往前遍历,遇到数组,新指针就需要写入number,遇到字母,就赋值旧数
- 2025-01-16代码随想录算法训练营第8天 | 344.反转字符串,541. 反转字符串II,替换数字
一、刷题部分1.1题目名称原文链接:代码随想录题目链接:344.反转字符串-力扣(LeetCode)1.1.1题目描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决
- 2025-01-16代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19. 删除链表的倒数第N个节点、160.链表相交、142.环形链表II
9-24.两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]输出:[1] 提
- 2025-01-16代码随想录:二叉搜索树的最小绝对值
遍历二叉搜索树,定义一个全局的上一个节点确实好用/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):
- 2025-01-16代码随想录:验证二叉搜索树
二叉搜索树的中序遍历结果是一个递增的数组为了省空间可以用一个变量记录上一次的数字我一开始设置上一次的为null,结果c++中int为null时实际为0,所以要用最小值/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*
- 2025-01-15代码随想录Day36 | 1049.最后一块石头的重量 II,494.目标和,474.一和零
代码随想录Day36|1049.最后一块石头的重量II,494.目标和,474.一和零1049.最后一块石头的重量视为背包问题,求解sum/2容量背包能装下的最大重量返回的是这一部分石头与另一部分的差值的绝对值代码即为经典的01背包问题classSolution{publicintlastSt
- 2025-01-14代码随想录:验证二叉搜索树
二叉搜索树的中序遍历结果是一个递增的数组为了省空间可以用一个变量记录上一次的数字我一开始设置上一次的为null,结果c++中int为null时实际为0,所以要用最小值/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*
- 2025-01-14【代码随想录】刷题记录(102)-不同路径 II
题目描述:给定一个 mxn 的整数数组 grid。一个机器人初始位于 左上角(即 grid[0][0])。机器人尝试移动到 右下角(即 grid[m-1][n-1])。机器人每次只能向下或者向右移动一步。网格中的障碍物和空位置分别用 1 和 0 来表示。机器人的移动路径中不能包含 任何 有
- 2025-01-14代码随想录Day35 | 01背包问题 二维,01背包问题 一维,416.分割等和子集
代码随想录Day35|01背包问题二维,01背包问题一维,416.分割等和子集01背包问题二维动态规划经典问题dp定义:dp[i][j]表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少状态转移方程:dp[i][j]=max(dp[i-1][j],dp[i-1][j-weight[i]]+va