草庐IT

leetcode刷题之回文链表

全部标签

代码随想录刷题笔记 DAY 37 | 动态规划理论基础 | 斐波那契数 No.509 | 爬楼梯 No.70 | 使用最小花费爬楼梯 No.746

文章目录Day3700.动态规划理论基础01.斐波那契数(No.509)题目笔记代码02.爬楼梯(No.70)题目笔记代码03.使用最小花费爬楼梯(No.746)题目笔记代码Day3700.动态规划理论基础最常见的动态规划题目其实就是求最值,比如说股票问题、背包问题,都是在求使用怎样的策略能使得整个系统达到一个最优化的状态。这是否和贪心比较类似呢?其实贪心算法和动态规划算法的区别还是比较大的,贪心算法每一次的最优解一定包含上一次的最优解,是局部的最优推出全局的最优,而动态规划的最优解不一定包含前一次的最优解,而是有可能是由更前面的部分推出的,所以通常通过dp[]数组来将前面的所有最优解来保存下

动态规划之解码方法【LeetCode】

动态规划之解码方法91.解码方法解法1解法291.解码方法91.解码方法解法1状态表示(这是最重要的):dp[i]表示以第i个字符为结尾,解码方法的总数。状态转移方程(最难的):根据最近的一步来划分问题,从右向左思考,我们需要考虑s[i]和s[i-1]是单独为一个字符形成两个数字,还是合并为一个字符形成为一个数字。  如果s[i]和s[i-1]是单独为一个字符形成两个数字,那么dp[i]的值就是dp[i-1]的值;  如果s[i]和s[i-1]合并为一个字符形成为一个数字,那么dp[i]的值就是dp[i-2]的值。因为s[i]和s[i-1]都形成一个数字了,再dp[i]往前就是就是dp[i-2

一篇文章了解区分指针数组,数组指针,函数指针,链表。

最近在学习指针,发现指针有这许多的知识,其中的奥妙还很多,需要学习的也很多,今天那我就将标题中的有关指针知识,即指针数组,数组指针,函数指针,给捋清楚这些知识点,区分这些名词,望各位能赏眼观看一下,如有不足,还请指点。下面就开始敲下这篇文章了。目录指针数组 数组指针函数指针链表指针数组指针数组,那么何为指针数组?仅仅看这个名词,各位觉得它是数组还是指针变量呢?那我们先来看一下官方的解释,何为指针数组。 在 C 语言中,指针数组是一种特殊的数据结构,它是一个数组,其中每个元素都是一个指针。 指针数组的定义方式如下: 类型 *数组名[数组大小];  其中, 类型  是指针所指向的元素的类型, 数组

算法沉淀——动态规划之01背包问题(leetcode真题剖析)

算法沉淀——动态规划之01背包问题01.【模板】01背包02.分割等和子集03.目标和04.最后一块石头的重量II01背包问题是一类经典的动态规划问题,通常描述为:有一个固定容量的背包,以及一组物品,每件物品都有重量和价值,目标是找到在背包容量范围内,使得背包中的物品总价值最大的组合。具体来说,问题的输入包括:一个固定容量的背包(通常表示为一个整数W)。一组物品,每个物品有两个属性:重量(通常表示为一个整数weight)和价值(通常表示为一个整数value)。求解的目标是找到一种放置物品的方式,使得放入背包的物品的总重量不超过背包容量,并且总价值最大。这个问题的特点是,对于每件物品,你只能选择

java - java中的单向链表

我刚刚在网上发现了这个很难的面试问题,我希望有人能帮助我理解它。这是一个通用问题...给定一个单向链表,成对交换列表中的每个元素,这样1->2->3->4将变为2->1->4->3。您必须交换元素,而不是值。答案应该适用于尾部指向列表头部的循环列表。您不必检查尾部是否指向中间(非头部)元素。所以,我想:publicclassNode{publicintn;//valuepublicNodenext;//pointertonextnode}实现它的最佳方法是什么?谁能帮忙? 最佳答案 我同意@Stephen关于没有(完全)给出答案的看

【C语言】Leetcode 206.反转链表

博主主页:17_Kevin-CSDN博客收录专栏:《Leetcode》题目解决思路思路一:翻转链表structListNode*reverseList(structListNode*head){if(head==NULL){returnNULL;}structListNode*n1=NULL,*n2=head,*n3=n2->next;while(n2!=NULL){n2->next=n1;n1=n2;n2=n3;if(n3!=NULL){n3=n2->next;}}returnn1;}我们定义三个节点的指针n1,n2,n3.分别指向NULL,head,head->next。这样我们通过三个指

【海贼王的数据航海:利用数据结构成为数据海洋的霸主】链表—双向链表

目录往期1-> 带头+双向+循环链表(双链表)1.1->接口声明1.2->接口实现1.2.1-> 双向链表初始化1.2.2 -> 动态申请一个结点1.2.3 -> 双向链表销毁1.2.4 -> 双向链表打印1.2.5 -> 双向链表判空1.2.6 -> 双向链表尾插1.2.7 -> 双向链表尾删1.2.8 -> 双向链表头插1.2.9 -> 双向链表头删1.2.10-> 双向链表查找1.2.11->  双向链表在pos的前面进行插入1.2.12-> 双向链表删除pos位置的节点2->顺序表和链表的区别3->完整代码3.1->List.c3.2->List.h3.3->Test.c往期链表-单链

【LeetCode-337】打家劫舍III(动态规划)

目录题目描述解法1:动态规划代码实现题目链接题目描述在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。解法1:动态规划这道题目算是树形dp的入门题目,因为是在树上进行状态转移,我们在讲解二叉树的时候说过递归三部曲,那么下面我以递归三部曲为框架,其中融合动规五部曲的内容来进行讲解。确定递归函数的

【刷题】Leetcode 1609.奇偶树

Leetcode1609.奇偶树题目描述广度优先搜索(BFS)深度优先算法(DFS)思路一(BFS)思路二(DFS)Thanks♪(・ω・)ノ谢谢阅读!!!下一篇文章见!!!题目描述根据题目信息,我们可以整理出一些基本思路。首先我们需要想办法遍历每层数据其中需要记录二叉树当前深度。遍历的过程中进行判断,不符合要求就返回false基本就需要做到这两大板块就可以完成我们的任务了。重要的是这个过程如何实现:这里我们用到两个常用方法:广度优先搜索(BFS)和深度优先搜索(DFS)。下面初步解释一下两种算法:广度优先搜索(BFS)广度优先搜索是连通图的一种遍历算法,是很多重要图算法的原型(比如Dijks

LeetCode - 1371 每个元音包含偶数次的最长子字符串(Java & JS & Python & C)

题目来源1371.每个元音包含偶数次的最长子字符串-力扣(LeetCode)题目描述给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 'a','e','i','o','u',在子字符串中都恰好出现了偶数次。示例示例1输入:s="eleetminicoworoep"输出:13解释:最长子字符串是"leetminicowor",它包含e,i,o 各2个,以及0个a,u。示例2输入:s="leetcodeisgreat"输出:5解释:最长子字符串是"leetc",其中包含2个e。示例3输入:s="bcbcbc"输出:6解释:这个示例中,字符串"bcbcbc"本身就是最