2024.06.20 刷题日记

2. 两数相加

这道题目的思路就是模拟,好处是逆序的,不用反转链表:

	ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {// 创建一个新的链表节点,作为返回结果的头节点ListNode* dummyHead = new ListNode(0);ListNode *p = l1, *q = l2, *curr = dummyHead;int carry = 0, x = 0, y = 0, sum = 0;// 遍历两个链表,直到两个链表都到达尾部while (p != nullptr || q != nullptr) {x = (p != nullptr) ? p->val : 0;y = (q != nullptr) ? q->val : 0;sum = carry + x + y;carry = sum / 10;curr->next = new ListNode(sum % 10);curr = curr->next;if (p != nullptr)p = p->next;if (q != nullptr)q = q->next;}// 如果最后还有进位,需要添加一个节点存储进位的值if (carry > 0) {curr->next = new ListNode(carry);}return dummyHead->next;}

19. 删除链表的倒数第 N 个结点

这个题目首先得计算链表的长度len,然后计算出删除 nth 个元素。分类讨论 nth = 1、nth = len的情况:

	ListNode* removeNthFromEnd(ListNode* head, int n) {// 计算长度int len = 0;ListNode* p = head;while (p) {len++;p = p->next;}// 第几个数int nth = len-n+1;// 如果是第一个if(nth == 1) return head->next;// 将指针指向nth的前一个int i = 1;p = head;while(i != nth-1){p = p->next;i++;}// 如果是最后一个if(nth == len){p->next = nullptr;return head;}p->next = p->next->next;return head;}

24. 两两交换链表中的节点

这个题在草稿纸上一比划就出来了,就是设置两个指针:curr 和 next,然后采用迭代的方法遍历,直到 next->next 为空:

	ListNode* swapPairs(ListNode* head) {// 对于 pListNode* dummy = new ListNode(0);dummy->next = head;ListNode* curr = dummy;ListNode* next = curr->next;if (next == nullptr || next->next == nullptr)return dummy->next;while (next) {if(next->next == nullptr) break;curr->next = next->next;next->next = curr->next->next;curr->next->next = next;// 后移curr = curr->next->next;next = curr->next;}return dummy->next;}

25. K 个一组翻转链表

仍然是迭代的思路,这里注意的是,迭代的次数为k-1:

	ListNode* reverseKGroup(ListNode* head, int k) {if (head == nullptr || k == 1)return head;ListNode* dummy = new ListNode(0);dummy->next = head;ListNode* cur = dummy;ListNode* prev = dummy;ListNode* nex = dummy;int count = 0;// 首先统计链表的长度while (cur->next != nullptr) {cur = cur->next;count++;}// 当还有足够的节点进行翻转时进行循环while (count >= k) {cur = prev->next; // 指向当前k组的第一个节点nex = cur->next;  // 指向当前k组的第二个节点for (int i = 1; i < k; i++) {cur->next = nex->next;nex->next = prev->next;prev->next = nex;nex = cur->next;}prev = cur;count -= k;}return dummy->next;}

94. 二叉树的中序遍历

递归还是简单:

	vector<int> ans;void inorder(TreeNode* root) {if (!root)return;inorder(root->left);ans.push_back(root->val);inorder(root->right);}vector<int> inorderTraversal(TreeNode* root) {inorder(root);return ans;}

104. 二叉树的最大深度

只需要取左子树与右子树的最大值+1,然后递归。递归出口是:if(root == nullptr) return 0;,所以代码就是:

	int maxDepth(TreeNode* root) {return !root ? 0 : max(maxDepth(root->left), maxDepth(root->right)) + 1;}

226. 翻转二叉树

依然是递归,因为二叉树的定义本身就是递归的,算法也是依赖于数据结构的:

	void invert(TreeNode *root){if(!root) return;TreeNode *temp = root->left;root->left = root->right;root->right = temp;invert(root->left);invert(root->right);}TreeNode* invertTree(TreeNode* root) {// 递归invert(root);return root;}

总结

2. 两数相加

这道题目要求实现两个逆序存储的链表代表的数字相加,返回结果链表。关键点在于模拟加法的进位处理,并且要注意链表长度不一致的情况。代码中使用了哑节点简化了头节点处理,逐位相加并处理进位。

19. 删除链表的倒数第 N 个结点

这个问题中,需要删除链表中倒数第 n 个节点,要求一次遍历解决。解法是使用快慢指针法,快指针先走 n+1 步,然后慢指针开始走,当快指针走到链表末尾时,慢指针指向要删除节点的前一个节点。

24. 两两交换链表中的节点

要求将链表中每两个相邻节点进行交换。这个问题可以通过迭代或递归来解决。迭代方法中,使用两个指针 currnext,每次交换它们的后继节点,并更新指针。

25. K 个一组翻转链表

这个问题要求每 k 个节点一组进行翻转,如果节点数不足 k,则保持原有顺序。解法使用迭代方法,先计算链表长度,然后在每次迭代中反转当前 k 个节点,并将上一组的尾部与新组的头部连接。

94. 二叉树的中序遍历

二叉树的中序遍历可以通过递归或迭代实现。递归方法简单直观,按照左子树-根节点-右子树的顺序访问节点,并将节点值保存在结果数组中。

104. 二叉树的最大深度

求二叉树的最大深度,递归地计算左右子树的最大深度,然后取较大值加上当前节点的深度。递归出口是空节点,即 nullptr 返回深度 0

226. 翻转二叉树

翻转二叉树就是将每个节点的左右子树交换。递归方法简洁,递归函数中先交换当前节点的左右子树,然后递归地对左右子树进行翻转。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/32797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】进程间通信_1

文章目录 七、进程间通信1. 进程间通信分类管道 未完待续 七、进程间通信 进程间由于 进程具有独立性 &#xff0c;所以不可以直接进行数据传递。但是我们通常需要多个进程协同&#xff0c;共同完成一件事&#xff0c;所以我们需要进程间通信的手段。进程间通信的本质就是先让…

linux创建用户、切换用户、删除用户

创建用户 # 创建新用户 sudo useradd newuser# 设置新用户的密码 sudo passwd newuser切换用户 # 切换到新用户 su newuser# 验证用户切换 whoami 删除用户 # 删除用户 sudo userdel -r username# 验证用户是否已被删除 grep username /etc/passwd 如果删除用户时提示&…

基础C语言知识串串香11☞宏定义与预处理、函数和函数库

​ 六、C语言宏定义与预处理、函数和函数库 6.1 编译工具链 源码.c ——> (预处理)——>预处理过的.i文件——>(编译)——>汇编文件.S——>(汇编)——>目标文件.o->(链接)——>elf可执行程序 预处理用预处理器&#xff0c;编译用编译器&#xff0c;…

WordPress视频主题Qinmei 2.0

WordPress视频主题Qinmei 2.0&#xff0c;简单漂亮的WP视频站源码 主题功能 可以根据豆瓣ID直接获取到其他详细信息&#xff0c;省去慢慢填写的痛苦&#xff1b;播放器支持直链&#xff0c;解析&#xff0c;m3u8格式&#xff0c;同时解析可匹配正则自动更改&#xff1b;新增动…

Java并发编程原理精讲 视频教程 下载

Java并发编程原理精讲 视频教程 下载 ├─01 第一章 线程基础 │ ├─01 线程概述 │ │ 01 认识线程.mp4 │ │ 02 线程和进程的关系.mp4 │ │ 03 并发和并行的区别.mp4 │ │ 04 并发编程的应用场景和风险.mp4 │ │ │ ├─02 线程…

pip命令总结

# Commands: 设置pip安装程序为国内镜像 永久设置 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ pip install #安装包 pip download #下载包 pip uninstall #卸载包 pip freeze …

2024全国各地高考录取分数线一览表(含一本、二本、专科)

2024年高考录取分数线陆续公布&#xff0c;上大学网(www.sdaxue.com)为大家整理全国31个省市高考录取分数线汇总&#xff0c;包括本科批、专科批和特殊类招生控制分数线汇总&#xff0c;来看看你的省份多少分能上大学吧。 一、2024年全国高考录取线一览表 1、宁夏 一本线&…

Java开发-面试题-0007-GPT和MBR的区别

Java开发-面试题-0007-GPT和MBR的区别 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&#xff09; 生活公众号&#…

美国Linux服务器系统网络流量监控工具

美国Linux服务器系统上有很多现成的工具&#xff0c;能够满足用户进行监控网络的需求&#xff0c; 虽然每个工具的特点都有所不用&#xff0c;但都能够帮助美国Linux服务器用户实现监控网络流量的目的&#xff0c;区别只在于不同的工具其工作方式的不同&#xff0c;本文小编就来…

电压互感器在线监测

电压互感器在线监测是电力系统维护和安全运行中的重要环节,它能够实时监控电压互感器的运行状态,确保电力系统的高效和稳定运行。以下是对电压互感器在线监测的详细介绍: 一、电压互感器在线监测的意义 电压互感器作为电力系统中的重要设备,其安全性和稳定性对电力系统的…

2025秋招 Python 面试真题专栏目录

欢迎来到 2025 秋招 Python 面试题专栏&#xff01;本专栏旨在为准备 Python 面试的同学提供一个全面的资源库&#xff0c;涵盖 Python 语言特性、操作系统、数据库、网络、数据结构、编程题等各个方面的知识。以下是本专栏的详细目录及内容简介&#xff1a; Python语言特性 …

Golang中的CAS操作

CAS&#xff08;Compare And Swap&#xff09;算法在Go语言中是作为原子操作提供的。CAS是一种无锁的技术&#xff0c;当多个线程尝试使用共享数据时&#xff0c;CAS能够检测到其他线程是否已经改变了这个数据&#xff0c;这是一种解决并发问题的策略。 CAS算法包含三个参数—…

大模型参数高效微调学习笔记

大模型参数高效微调学习笔记 github地址 billbill链接 1.分类 图中有五个大类&#xff1a; selective&#xff08;选择性微调&#xff09;&#xff1a;BitFit&#xff0c;Attention Tuningsoft prompts&#xff08;提示微调&#xff09;&#xff1a;Prompt-tuning&#xff0c…

微信小程序表单

在我们的课程中&#xff0c;我们深入探讨了微信小程序表单的开发和应用。以下是我们课程的主要内容和收获&#xff1a; 一、课程目标 本课程旨在帮助学生掌握微信小程序表单的基本概念、开发流程和最佳实践。学生将学习如何创建和配置表单组件&#xff0c;处理表单数据&#xf…

Unity和iOS原生专题四 Unity和iOS原生交互传值内存空间分配问题

一 调用方法一 1.1 Unity代码-Unity调方法传参,有返回值 [DllImport("__Internal")] // 给iOS传string参数,有返回值,返回值通过iOS的return方法返回给Unity private static extern string getIPv6(string mHost, string mPort) 1.2 iOS代码-iOS通过return方法,将…

Selenium进行Web自动化测试

Selenium进行Web自动化测试 SeleniumPython实现Web自动化测试一、环境配置 SeleniumPython实现Web自动化测试 一、环境配置 环境基于win10&#xff08;X64&#xff09; 安装Python&#xff1b;安装PyCham安装chomedriver chomedriver下载地址 可以查看本地chrome软件版本下载…

css中的一些符号代表什么选择器

**css中的一些符号代表什么选择器 空格&#xff08;派生选择器&#xff09; &#xff08;相邻/下一个选择器&#xff09; ~&#xff08;兄弟选择器 &#xff09; 大于号&#xff08;直接选择器&#xff09; *&#xff08;所有后代选择器&#xff09; 空格&#xff08;后代…

项目-博客驿站测试报告

测试用例设计 功能测试 该部分主要围绕对于博客系统的增删改查, 文章通过性审核, 关注功能等进行测试, 还进行了其它一些探索性的测试. 以上是作者设计的全部用例. BUG发现: 问题1: 当多端同时操作同一篇文章BUG 环境: Windows11, Edge和Chrome浏览器 复现步骤: 1.先使用Edg…

基于协方差信息的Massive MIMO信道估计算法性能研究

1. 引言 随着移动互联网不断发展&#xff0c;人们对通信的速率和可靠性的要求越来越高[1]。目前第四代移动通信系统已经逐渐商用&#xff0c;研究人员开始着手研究下一代移动通信系统相关技术[2][3]。在下一代移动通信系统中要求下行速率达到10Gbps&#xff0c;这就要求我们使…

BFS:解决多源最短路问题

文章目录 什么是多源最短路问题&#xff1f;1.矩阵2.飞地的数量3.地图的最高点4.地图分析总结 什么是多源最短路问题&#xff1f; 多源最短路问题&#xff08;Multi-Source Shortest Path Problem&#xff0c;MSSP&#xff09;是图论中的一个经典问题&#xff0c;它的目标是在…