Leetcode究极刷题笔记(21~25)

article/2023/6/4 15:00:40

(21)合并两个有序链表(简单)

实现思路:

本题的实现类似于归并排序,我们先创建一个新链表的头结点与尾结点,然后同时遍历list1与list2,分别将二者之中较小的那一个插入新的链表即可,最后我们将剩余的节点直接接在新链表的尾部输出就可以了

代码实现如下:

class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {auto newnode=new ListNode(-1),tail=newnode;while(list1 && list2){if(list1->val<list2->val){tail->next=list1;tail=tail->next;list1=list1->next;}else{tail->next=list2;tail=tail->next;list2=list2->next;}}if(list1) tail->next=list1;if(list2) tail->next=list2;return  newnode->next;}
};

(22)括号生成(中等)

实现思路:
合法的括号序列
(1)任意前缀中‘(’的数量大于等于‘)’的数量(2)左右括号数量相同

排列的条件:
a.左括号的数量小于n  b.右括号的数量小于n并且此时左括号的数量大于右括号的数量
代码实现如下:

class Solution {
public:vector<string> res;void dfs(int n,int lc,int rc,string ans){if(lc==n && rc==n) res.push_back(ans);else{if(lc<n) dfs(n,lc+1,rc,ans+'(');if(rc<n && lc>rc) dfs(n,lc,rc+1,ans+')');}}vector<string> generateParenthesis(int n) {dfs(n,0,0,"");return res;}
};

(23)合并k个升序链表(困难)

实现思路:首先在实现之前先了解一下仿函数,仿函数其实就是一个类,重载了一个运算符operator(),它的类对象可以像函数一样使用。

本题实现的思路与我们之前写过合并里那个有序链表的思路是大致相同的,首先我们将比较下来的每一个链表的最小值放在新链表的头节点,如果此时放进去的头结点有下一个节点的话,就将对应的下一个节点放入优先级队列进行排列,由此来实现我们对应的代码。

代码实现如下:

class Solution {
public:struct compare{bool operator()(ListNode* a,ListNode* b){return a->val>b->val;}};ListNode* mergeKLists(vector<ListNode*>& lists) {priority_queue<ListNode*,vector<ListNode*>,compare> heap;auto dummy=new ListNode(-1),tail=dummy;for(auto l:lists){if(l) heap.push(l);} while(heap.size()){auto t=heap.top();heap.pop();tail=tail->next=t;if(t->next) heap.push(t->next);}return dummy->next;}
};

(24)两两交换链表中的节点(中等)

实现思路:
本题虽然是中等题,但是只要画出图来理解就十分好写,这里不做过多赘述,直接看代码。

代码实现如下:

class Solution {
public:ListNode* swapPairs(ListNode* head) {auto dummy=new ListNode(-1);dummy->next=head;for(auto p=dummy;p->next && p->next->next;){auto a=p->next,b=a->next;p->next=b;a->next=b->next;b->next=a;p=a;}return dummy->next;}
};

(25)k个一组翻转链表(困难)

实现思路:
首先我们第一步就是要确定来表是否有k个节点,这是第一步判断;接着我们逐步对k个节点进行翻转,同时在开始与结束时记住对应的头节点与尾结点,翻转之后将对应的关系串联起来,这样就实现了我们的代码

代码实现如下:

class Solution {
public:ListNode* reverseKGroup(ListNode* head, int k) {auto dummy=new ListNode(-1);dummy->next=head;for(auto p=dummy;;){auto q=p;for(int i=0;i<k&&q;i++){q=q->next;}if(!q) break;auto a=p->next,b=a->next;for(int i=0;i<k-1;i++){auto c=b->next;b->next=a;a=b,b=c;}auto c=p->next;p->next=a,c->next=b;p=c;}return dummy->next;}
};

希望以上文章对您有帮助!!!

http://www.ngui.cc/article/show-1007725.html

相关文章

编程题 进制转换(Java实现)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

4005. 取石子游戏

Powered by:NEFU AB-IN Link 文章目录4005. 取石子游戏题意思路代码4005. 取石子游戏 题意 Alice 和 Bob 正在玩一个取石子游戏。 共有 n个石子&#xff0c;双方轮流采取行动。 每当轮到一人行动时&#xff0c;该名玩家需要从石子堆中取走恰好 1或 2或 k个石子。 如果轮到一人…

一维与二维前缀和(蓝桥杯复习+例题讲解+模板c++)

文章目录前缀和二维前缀和总结3956. 截断数组99. 激光炸弹文章首发于&#xff1a; My Blog 欢迎大佬们前来逛逛前缀和 前缀和是一种常见的算法&#xff0c;用于快速计算数组中某一段区间的和。前缀和的思想就是预处理出数组中前缀和&#xff0c;然后用后缀和减去前缀和&#x…

【零基础入门SpringBoot2】—— Web开发_3

一、Web原生组件注入 如何向SpringBoot中注入Web的原生组件&#xff1f; 1、使用Servlet API &#xff08;1&#xff09;Servlet原生组件 创建一个Servlet类&#xff0c;让它继承原生的Servlet的实现类 HttpServlet &#xff0c;使用WebServlet注解指定我们的请求&#xff0c;…

MobaXterm 链接Linux Ubuntu

MobaXterm 链接Linux Ubuntu 1.查看是否安装 openssh-server sudo apt-get install open-server2.开启ssh服务 sudo /etc/init.d/ssh start3.查看虚拟机的IP ifconfig5.打开MobaXterm 将ip输入即可 如果传输文件&#xff0c;选择SFTP&#xff0c;步骤和上面一样

c++加解密算法总结

不可逆加密 概述 单向加密&#xff0c;主要是对明文的保密和摘要提取。算法包括MD5、SHA、HMAC等。 特点 压缩性&#xff1a;任意长度的数据&#xff0c;单向加密后长度都是固定的&#xff1b;抗修改性&#xff1a;对原数据进行任何改动&#xff0c;哪怕只修改1个字节&…

JAVA Session会话 Thymeleaf - 视图模板技术配置步骤

JAVAWebSession会话会话跟踪技术session保存作用域Thymeleaf - 视图模板技术配置过程Session会话 HTTP是无状态的&#xff1a;服务器无法区分这两个请求是同一个客户端发过来的&#xff0c;还是不同的客户端发过来的 现实问题&#xff1a;第一次请求是添加商品到购物车&#x…

model.train()、model.eval()什么时候用

model.train() 在使用 pytorch 构建神经网络的时候&#xff0c;训练过程中会在程序上方添加一句model.train()&#xff0c;作用是 启用 batch normalization 和 dropout 。 如果模型中有BN层&#xff08;Batch Normalization&#xff09;和 Dropout &#xff0c;需要在训练时…

Mac M1/Intel 芯片 Nginx+PHP开发环境配置——初探(一)

最近因为新买Mac M系列芯片笔记本&#xff0c;一直也没搭建过PHP的开发环境&#xff0c;花了一点时间特意在本机做了一次环境搭建测试具体如下。开始之前&#xff0c;需要安装一些工具来完成配置&#xff0c;工具列表如下:XcodeVS CodeHomebrewOpenSSL & wgetMySQLPostgres…

Spring《二》bean的实例化与生命周期

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 目录一、bean实例化&#x1f34d;1.构造方法 ***2.静态工厂 *使用工厂创建对象实例化bean3.实例工厂 ***使用示例工厂创建对象实例工厂实例化beanFactoryBean二、生命周期&#x1f351;1.生命周期设置2.在main方法使…