草庐IT

leetcode刷题之回文链表

全部标签

数据结构 模拟实现LinkedList单向不循环链表

目录一、链表的简单介绍二、链表的接口三、链表的方法实现(1)display方法(2)size得到单链表的长度方法(3)addFirst头插方法(4)addLast尾插方法(5)addIndex指定位置插入方法(6)contains方法(7)remove删除第一个key值节点的方法(8)removeAllKey删除所有值为key的方法(9)clear方法四、最终代码一、链表的简单介绍概念:链表是一种物理存储结构不连续,逻辑上是连续的;链表类似现实中的火车,一节车厢连着一节车厢,而链表是通过链表之间的引用进行连接,构成一节一节的数据结构。如图:二、链表的接口代码如下:publicinterface

算法-小红的ABC(最短回文子串)- [简单]

直通牛客-小红的ABC题目描述小红拿到了一个只包含'a','b','c'三种字符的字符串。小红想知道,这个字符串最短的、长度超过1的回文子串的长度是多少?子串定义:字符串取一段连续的区间。例如"abcca"的子串有"ab"、"bcca"等,但"aca"则不是它的子串。回文的定义:一个字符串正着读和倒着读都是相同的,那么定义它的回文的。输入描述:一个只包含'a','b','c'三种字符的字符串。数据范围:字符串长度不小于2,且不超过100输出描述:如果不存在长度超过1的回文子串,则输出-1。否则输出长度超过1的最短回文子串的长度。分析:回文串只有两类:xx 或者xyx两种类型,以abccba为例

【map】【单调栈 】LeetCode768: 最多能完成排序的块 II

作者推荐【贪心算法】【中位贪心】.执行操作使频率分数最大本文涉及的基础知识点单调栈分类、封装和总结排序map区间合并题目给你一个整数数组arr。将arr分割成若干块,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。返回能将数组分成的最多块数?示例1:输入:arr=[5,4,3,2,1]输出:1解释:将数组分成2块或者更多块,都无法得到所需的结果。例如,分成[5,4],[3,2,1]的结果是[4,5,1,2,3],这不是有序的数组。示例2:输入:arr=[2,1,3,4,4]输出:4解释:可以把它分成两块,例如[2,1],[3,4,4]。然而,分成[2,1],[

链表(超详细--包教包会)

目录一、概述二、对链表的基本操作三、链表的分类四、静态链表五、动态链表1、malloc函数2、calloc函数3、free函数六、动态链表的建立七、输出链表中的数据 八、查找节点九、删除节点十、插入节点 十一、整体代码一、概述链表存储结构是一种动态数据结构,其特点是它包含的数据对象的个数及其相互关系可以按需要改变,存储空间是程序根据需要在程序运行过程中向系统申请获得,链表也不要求逻辑上相邻的元素在物理位置上也相邻,它没有顺序存储结构所具有的弱点。链表:由各个节点组成一种链状的结构;链表是由节点构成;表头+结点+表尾节点:就是一个特殊的结构体,此结构体由2部分组成,一部分是数据域,另一部分是指针

LeedCode刷题---二分查找类问题

顾得泉:个人主页个人专栏:《Linux操作系统》  《C/C++》  《LeedCode刷题》键盘敲烂,年薪百万!一、二分查找题目链接:二分查找题目描述       给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例1:输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:9出现在nums中并且下标为4示例 2:输入:nums=[-1,0,3,5,9,12],target=2输出:-1解释:2不存在nums中因此返回-1提示:你可以假设 nums

LeetCode | 100. 相同的树

LeetCode|100.相同的树OJ链接判断两个节点是否等于空,两个都等于空就直接返回true如果一个等于空,另一个不等于空,说明false然后再判断两个树的值是否相等最后递归p的左,q的左,p的右,q的右boolisSameTree(structTreeNode*p,structTreeNode*q){if(p==NULL&&q==NULL)returntrue;if(p==NULL||q==NULL)returnfalse;if(p->val!=q->val)returnfalse;returnisSameTree(p->left,q->left)&&isSameTree(p->righ

【Day28】力扣算法(超详细思路+注释) [1790. 仅执行一次字符串交换能否使两个字符串相等 ] [328. 奇偶链表 ][148. 排序链表]

刷题打卡,第二十八天题目一、1790.仅执行一次字符串交换能否使两个字符串相等题目二、328.奇偶链表题目三、148.排序链表题目一、1790.仅执行一次字符串交换能否使两个字符串相等原题链接:1790.仅执行一次字符串交换能否使两个字符串相等题目描述:给你长度相等的两个字符串s1和s2。一次字符串交换操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。如果对其中一个字符串执行最多一次字符串交换就可以使两个字符串相等,返回true;否则,返回false。/示例1:输入:s1=“bank”,s2=“kanb”输出:true解释:例如,交换s2中的第一个和最后一个

【单调栈】LeetCode:2818操作使得分最大

作者推荐map|动态规划|单调栈|LeetCode975:奇偶跳本文涉及的基础知识点单调栈分类、封装和总结题目给你一个长度为n的正整数数组nums和一个整数k。一开始,你的分数为1。你可以进行以下操作至多k次,目标是使你的分数最大:选择一个之前没有选过的非空子数组nums[l,…,r]。从nums[l,…,r]里面选择一个质数分数最高的元素x。如果多个元素质数分数相同且最高,选择下标最小的一个。将你的分数乘以x。nums[l,…,r]表示nums中起始下标为l,结束下标为r的子数组,两个端点都包含。一个整数的质数分数等于x不同质因子的数目。比方说,300的质数分数为3,因为300=2*2*3*

【数据结构】LRU缓存的简单模拟实现(leetcode力扣146LRU缓存)

文章目录一、定义二、LRU模拟实现二、代码实现一、定义LRU是LeastRecentlyUsed的缩写,意思是最近最少使用,它是一种Cache替换算法。Cache的容量有限,因此当Cache的容量用完后,而又有新的内容需要添加进来时,就需要挑选并舍弃原有的部分内容,从而腾出空间来放新内容。LRUCache的替换原则就是将最近最少使用的内容替换掉。二、LRU模拟实现146.LRU缓存下面我们就借力扣的这道题来简单实现一个题目中要求我们以O(1)的时间复杂度来完成,查找的话我们首先肯定会想到哈希表,但又涉及一个问题,我们查找完之后还需要更新一下刚刚查找数据的位置,将这个数据置为是新的数据,我们如何

LeetCode:455. 分发饼干——贪心算法

🍎道阻且长,行则将至。🍓🌻算法,不如说它是一种思考方式🍀算法专栏:👉🏻123贪心算法是在每个阶段选取局部最优解,最终得到全局最优解的一种思想。贪心算法与动态规划的思路相似,但贪心算法要在每个阶段选择最优解,而这个最优解不一定是全局最优解,贪心算法在某些情况并不能得到全局最优解。贪心算法的基本思路:找到最优子结构:将问题分解为多个子问题,并且每个子问题具有最优子结构,即解决子问题的最优解可以组合成原问题的最优解。找到贪心策略:为了解决每个子问题,找出一种最优策略,使得每个子问题都采用该策略,最终可以得到原问题的最优解。证明贪心策略的合理性:贪心策略在每个阶段选取局部最优解,最终可以得到全局最优解