草庐IT

刷题题单

全部标签

动态规划算法OJ刷题(3)

CC19分割回文串-ii问题描述给出一个字符串s,分割s使得分割出的每一个子串都是回文串。计算将字符串s分割成回文串的最小切割数。例如:给定字符串s=“aab”,返回1,因为回文分割结果[“aa”,“b”]是切割一次生成的。解题思路方法1:用一维数组来完成,O(N^3)注意转移方程必须是让两个相邻状态之间一步完成。状态方程F(i):到第i个字符所需要的最小分割次数状态转移方程:j初始条件:F(i)=i-1==>F(1)=0。即单个字符只需要切0次,因为单子符都为回文串,2个字符最大需要1次,3个2次…【因为状态转移方程中要取min,那么F(i)要给一个最大的分割次数i-1】返回结果:F(s.s

C语言蓝桥杯刷题:数字三角形

题目链接解题思路:该题是一道经典的动态规划,对于这样的数字三角形,我们用一个数组arr存储各个位置的数字,再用另一个数组brr来记录到该位置的最大路径对于图中的7,我们用数组保存就是arr[0][0]对于图中的8,也就是arr[1][1]情况1:走到最左边一列这种情况只可能是上一行最左边一列走过来的,如图以上图为例:我们brr现在开始从起点7出发,因为起点只有一个,也就是把arr的值7赋给brr[0][0]然后假设我们从7往左走到3,也就是arr[0][0]走向arr[1][0],我们可以记录brr[1][0]=brr[0][0]+arr[1][0]对于其他的路径走到最左边一列,那都是brr[

C语言蓝桥杯刷题:数字三角形

题目链接解题思路:该题是一道经典的动态规划,对于这样的数字三角形,我们用一个数组arr存储各个位置的数字,再用另一个数组brr来记录到该位置的最大路径对于图中的7,我们用数组保存就是arr[0][0]对于图中的8,也就是arr[1][1]情况1:走到最左边一列这种情况只可能是上一行最左边一列走过来的,如图以上图为例:我们brr现在开始从起点7出发,因为起点只有一个,也就是把arr的值7赋给brr[0][0]然后假设我们从7往左走到3,也就是arr[0][0]走向arr[1][0],我们可以记录brr[1][0]=brr[0][0]+arr[1][0]对于其他的路径走到最左边一列,那都是brr[

leetcode刷题(3)

各位朋友们大家好,今天是我leedcode刷题系列的第三篇,废话不多说,直接进入主题。文章目录分割链表题目要求用例输入提示做题思路c语言代码实现Java代码实现相交链表题目要求用例输入提示做题思路c语言实现代码Java代码实现分割链表leetcode之分割链表(难度:中等)题目要求给你一个链表的头节点head和一个特定值x,请你对链表进行分隔,使得所有小于x的节点都出现在大于或等于x的节点之前。你不需要保留每个分区中各节点的初始相对位置。用例输入示例1:输入:head=[1,4,3,2,5,2],x=3输出:[1,2,2,4,3,5]示例2:输入:head=[2,1],x=2输出:[1,2]这

leetcode刷题(3)

各位朋友们大家好,今天是我leedcode刷题系列的第三篇,废话不多说,直接进入主题。文章目录分割链表题目要求用例输入提示做题思路c语言代码实现Java代码实现相交链表题目要求用例输入提示做题思路c语言实现代码Java代码实现分割链表leetcode之分割链表(难度:中等)题目要求给你一个链表的头节点head和一个特定值x,请你对链表进行分隔,使得所有小于x的节点都出现在大于或等于x的节点之前。你不需要保留每个分区中各节点的初始相对位置。用例输入示例1:输入:head=[1,4,3,2,5,2],x=3输出:[1,2,2,4,3,5]示例2:输入:head=[2,1],x=2输出:[1,2]这

牛客网刷题之链表(一)

链表NB1删除链表峰值NB2牛群排列去重NB3调整牛群顺序NB4牛群的重新分组NB5牛群的重新排列NB6合并两群能量值NB7牛群的能量值以下题全部出自牛客网。题目题目考察的知识点链表:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表的分类有单向、双向等多种类型。其中单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。单链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象)+指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。与链表有关的题基本都是插入,删除,

2023-1-21 刷题情况

最少侧跳次数首先祝大家除夕快乐。题目描述给你一个长度为n的3跑道道路,它总共包含n+1个点,编号为0到n。一只青蛙从0号点第二条跑道出发,它想要跳到点n处。然而道路上可能有一些障碍。给你一个长度为n+1的数组obstacles,其中obstacles[i](取值范围从0到3)表示在点i处的obstacles[i]跑道上有一个障碍。如果obstacles[i]==0,那么点i处没有障碍。任何一个点的三条跑道中最多有一个障碍。比方说,如果obstacles[2]==1,那么说明在点2处跑道1有障碍。这只青蛙从点i跳到点i+1且跑道不变的前提是点i+1的同一跑道上没有障碍。为了躲避障碍,这只青蛙也可

算法刷题Day14 二叉树的前序、中序、后序遍历(递归、迭代、统一迭代方法)

Day14二叉树二叉树的定义/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left(nullptr),right(nullptr){}*TreeNode(intx,TreeNode*left,TreeNode*right):val(x),left(left),right(right){}*};*/前序遍历递归classSol

【算法刷题】动态规划算法题型及方法归纳

动态规划特点动态规划中每一个状态一定是由上一个状态推导出来,根据这个特点,可以在状态计算过程中,存储某一条件下的数据,当再次遍历该条件时,直接取该条件对应的数据即可,可以避免重复计算,减少时间。核心思路:学会倒着推理,从当前情况反推,会在上一步会由哪些情况到达这一步,从而分析出状态转移过程和递推公式。另一个就是在进行DFS遍历的时候,作为记录表,进行记忆化搜索。解题步骤:动态规划五步曲(1)确定dp数组(dptable)以及下标的含义(2)确定递推公式(3)dp数组如何初始化(4)确定遍历顺序(5)举例推导dp数组参考文章:动态规划最强总结篇!1、动态规划基础题斐波那契数列:dp[i]=dp[

算法刷题Day 22 二叉搜索树的最近公共祖先+二叉搜索树中的插入操作+删除二叉搜索树中的节点

Day22二叉树235.二叉搜索树的最近公共祖先根据二叉搜索树的性质,相比普通二叉树可以极大程度的简化代码,作为公共祖先其值一定在两个给定节点值之间,从树根往下遍历,第一次出现两个给定节点值之间的值,那个节点即为最近公共祖先(为什么是最近不是最远?根节点一般为最远,第一次出现的值处于两个给定节点值之间的节点为最近)递归法classSolution{public:TreeNode*lowestCommonAncestor(TreeNode*root,TreeNode*p,TreeNode*q){if(!root)returnnullptr;if(root->valp->val&&root->va