leetcode刷题详解二
160. 相交链表
本质上是走过自己的路,再走过对方的路,这是求两个链表相交的方法
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {//本质上是走过自己的路,再走过对方的路if(headA == NULL|| headB == NULL){return NULL;}ListNode* temp_a = headA;ListNode* temp_b = headB;while(temp_a!=temp_b){if(temp_a == NULL){temp_a = headB;}else{temp_a = temp_a->next;}if(temp_b == NULL){temp_b = headA;}else{temp_b = temp_b->next;}}return temp_a;}
双指针法
情况一:两个链表相交。这个好判断
情况二:两个链表不相交。由于两个链表没有公共节点,两个指针也不会同时到达两个链表的尾节点,因此两个指针都会遍历完两个链表,指针pA 移动了m+n 次、指针pB 移动了 n+m 次之后,两个指针会同时变成空值null,此时返回null,满足循环条件。
⭕️206. 反转链表
ListNode* reverseList(ListNode* head) {if(head == nullptr){return head;}if(head->next == nullptr){return head;}ListNode *temp = reverseList(head->next);head->next->next = head;head->next = nullptr;return temp;}
上面这段代码是反转列表标准递归代码,也很好理解
21. 合并两个有序链表
使用迭代好理解。这道题第一反应就是四种种情况,全是空,一个是空,全不为空。
正常理解就是if,else if什么的,但是这样在写全不为空的时候很麻烦。
下面代码一个while(l1 && l2)就解决了上面的问题,很巧妙,很值得记住。必须全不为空才能进入循环,有一个是空指针就不能进入,这样代码好写很多很多
ListNode *head = new ListNode(-1);ListNode *pre = head;while(l1 && l2){ListNode* temp1 = l1;ListNode* temp2 = l2;if(l1->val >= l2->val){pre->next = l2;l2 = l2->next;}else{pre->next =l1;l1 = l1->next;}pre = pre->next;}if(l1 == nullptr){pre->next = l2;}if(l2 ==nullptr){pre->next = l1;}return head->next;}
141. 环形链表
思路:用快慢指针,如果是环形链表会相交
主要点在于while的循环条件,一定要针对快指针进行条件判断同时用&&而不是||
bool hasCycle(ListNode *head) {ListNode* fast = head;ListNode* slow = head;if(head == nullptr || head->next == nullptr){return false;}while(fast != nullptr && fast->next != nullptr){slow = slow->next;fast = fast->next->next;if(fast == slow){return true;}}return false;}
142. 环形链表 II
这道题自己画图就知道了,本质就是一道数学题。
判断有无环
![]()
a+(n+1)b+nc=2(a+b)⟹a=c+(n−1)(b+c)
即a=c
当第一次相遇时,快指针回到头结点,慢指针不动。两个指针按照相同速度走,相遇点即为环的入口点。
ListNode *detectCycle(ListNode *head) {ListNode* slow = head; ListNode* fast = head; while(fast && fast->next){ slow = slow->next; fast = fast->next->next; if(slow == fast){ fast = head; while(fast != slow){ fast = fast->next; slow = slow->next; } return fast; } } return nullptr;
}
19. 删除链表的倒数第 N 个结点
当碰到链表第几个节点的时候,双指针的思想可能正合适。
我们可以设想假设设定了双指针 p 和 q 的话,当 q 指向末尾的 NULL,p 与 q 之间相隔的元素个数为 n 时,那么删除掉 p 的下一个指针就完成了要求。
![]()
ListNode* removeNthFromEnd(ListNode* head, int n) { //双指针思想,以后这种倒数的长度类型的题目都可以用双指针 ListNode* p = head; ListNode* q = head; while(n>0){ p = p->next; n--; } if(!p){ return head->next; } while(p->next){ p = p->next; q = q->next; } q->next = q->next->next; return head;
}
24. 两两交换链表中的节点
思路:交换节点的题,就要有temp->next和temp->next->next。
如果 temp 的后面没有节点或者只有一个节点,则没有更多的节点需要交换,因此结束交换。否则,获得 temp 后面的两个节点 node1(temp->next)和 node2(temp->next->next),通过更新节点的指针关系实现两两交换节点。
下面是错误代码
ListNode* swapPairs(ListNode* head) { ListNode* temp = new ListNode(-1); temp->next = head; while(temp->next&&temp->next->next){ ListNode* l1 = temp->next; ListNode* l2 = temp->next->next; temp->next = l2; l1->next =l2->next; l2->next = l1; temp = l1; } return head;
}
输入:1,2,3,4
输出:1,4,3
错误原因:注意这道题head节点指的是首节点!这是最重要一点。其次,最开始head节点为1,在上面代码交换结束后正常来说为2,1,4,3,但是,head节点此刻还是1,如果返回head,则2被漏掉
正确代码
ListNode* swapPairs(ListNode* head) { ListNode* temp = new ListNode(-1); temp->next = head; ListNode* dummy = temp; while(temp->next&&temp->next->next){ ListNode* l1 = temp->next; ListNode* l2 = temp->next->next; temp->next = l2; l1->next =l2->next; l2->next = l1; temp = l1; } return dummy->next;
}
相关文章:

leetcode刷题详解二
160. 相交链表 本质上是走过自己的路,再走过对方的路,这是求两个链表相交的方法 ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {//本质上是走过自己的路,再走过对方的路if(headA NULL|| headB NULL){return NULL;}Lis…...
利用opencv/暗通道方法检测图像是否有雾-利用opencv/暗通道方法对深度学习目标检测算法结果进行二次识别提高准确率
目录 1 Python版本 2 C++版本 本来利用yolov5检测浓雾的,但是发现yolov5的检测结果会把一些正常天气检测成雾天,这种时候其实可以通过增加正常类,也就是将正常天气被误检成浓雾的图片当成一个正常类别去训练,但是不想标注图片,也不想重新训练算法了,因此想是不是可以用…...

Linux | 重定向 | 文件概念 | 查看文件 | 查看时间 | 查找文件 | zip
Linux | 重定向 | 文件概念 | 查看文件 | 查看时间 | 查找文件 | zip 文章目录 Linux | 重定向 | 文件概念 | 查看文件 | 查看时间 | 查找文件 | zip一、more1.1 输出重定向>和>>1.2 输入重定向< 二、 再谈一切皆文件三、less指令【重要】四、head指令五、tail指令…...

【广州华锐互动】利用VR体验环保低碳生活能带来哪些教育意义?
随着科技的不断发展,虚拟现实(VR)技术已经逐渐走进了我们的生活。从游戏娱乐到教育培训,VR技术的应用范围越来越广泛。而在这个追求绿色、环保的时代,VR技术也为我们带来了一种全新的环保低碳生活方式。让我们一起走进…...

python爬虫中 HTTP 到 HTTPS 的自动转换
前言 在当今互联网世界中,随着网络安全的重要性日益增加,越来越多的网站采用了 HTTPS 协议来保护用户数据的安全。然而,许多网站仍然支持 HTTP 协议,这就给我们的网络爬虫项目带来了一些挑战。为了应对这种情况,我们需…...

卷积神经网络(CNN)识别验证码
文章目录 一、前言二、前期工作1. 设置GPU(如果使用的是CPU可以忽略这步)2. 导入数据3. 查看数据4.标签数字化 二、构建一个tf.data.Dataset1.预处理函数2.加载数据3.配置数据 三、搭建网络模型四、编译五、训练六、模型评估七、保存和加载模型八、预测 …...

使用 PyODPS 采集神策事件数据
文章目录 一、前言二、数据采集、处理和入库2.1 获取神策 token2.2 请求神策数据2.3 数据处理-面向数组2.4 测试阿里云 DataFrame 入库2.5 调度设计与配置2.6 项目代码整合 三、小结四、花絮-避坑指南第一坑:阿里云仅深圳节点支持神策数据第二坑:神策 To…...

罗技M590鼠标usb优联连接不上
手里有一个罗技M590鼠标从18年4月一直用到现在,质量很好,除了滚轮有些松别的没毛病。最近一台笔记本电脑办公不太够用,又领了一个台式机,就想到M590支持双模连接,并且支持Flow,就把usb优联接收器从电池仓拿…...
天池 机器学习算法(一): 基于逻辑回归的分类预测
pytorch实战 课时7 神经网络 MSE的缺点:偏导值在输出概率值接近0或者接近1的时候非常小,这可能会造成模型刚开始训练时,偏导值几乎消失,模型速度非常慢。 交叉熵损失函数:平方损失则过于严格,需要使用更合…...

45岁后,3部位“越干净”,往往身体越健康,占一个也要恭喜!
众所周知,人的生命有长有短,而我们的身体健康状态,也同样会受到年龄的影响,就身体的年龄层次而言,往往需要我们用身体内部的干净程度来维持,换句话说就是:若是你的身体内部越干净,那…...

Windows安装Hadoop运行环境
1、下载Hadoop 2、解压Hadoop tar zxvf hadoop-3.1.1.tar.gz3、设置Hadoop环境变量 3.1.1、系统环境变量 # HADOOP_HOME D:\software\hadoop-3.1.13.1.2、Path 环境变量 %HADOOP_HOME%\bin %HADOOP_HOME%\sbin3.1.3、修改Hadoop文件JAVA_HOME 注 : 路径中不要出现空格 ,…...

软件测试 | MySQL 主键约束详解:保障数据完整性与性能优化
📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…...
深入了解Linux中的scp命令及高级用法
Linux操作系统中,scp(Secure Copy Protocol)命令是一个用于在本地系统和远程系统之间安全复制文件的强大工具。通过基于SSH的加密通信,scp提供了安全的文件传输方式。在本文中,我们将深入介绍scp命令的基本语法以及一些…...
moviepy 视频剪切,拼接,音频处理
官网 使用matplotlib — moviepy-cn 文档 案例 from moviepy.editor import * from moviepy.video.fx import resize from PIL import Imagefile1r"D:\xy_fs_try\video_to_deal\spider_video\file\vedeo3.mp4" file2r"D:\xy_fs_try\video_to_deal\spider_video\…...

ubuntu搭建phpmyadmin+wordpress
Ubuntu搭建phpmyadmin wordpress Linux系统设置:Ubuntu 22配置apache2搭建phpmyadmin配置Nginx环境,搭建wordpress Linux系统设置:Ubuntu 22 配置apache2 安装apache2 sudo apt -y install apache2设置端口号为8080 sudo vim /etc/apache…...

linux网络之网络层与数据链路层
文章目录 一、网络层 1.IP协议 2.IP协议头格式 3.网段划分 4.特殊ip地址 5.IP地址的数量限制 6.私有ip和公网IP 7.路由 二、数据链路层 1.以太网 2.以太网帧格式 3.MAC地址 4.对比理解MAC地址和IP地址 5.MTU 6.ARP协议 ARP协议的工作流程 ARP数据报的格式 7.DNS 8.ICMP协议 9.N…...

python数学建模之Numpy、Pandas学习与应用介绍
文章目录 Numpy学习1 Numpy 介绍与应用1-1Numpy是什么 2 NumPy Ndarray 对象3 Numpy 数据类型4 Numpy 数组属性 Pandas学习1 pandas新增数据列2 Pandas数据统计函数3 Pandas对缺失值的处理 总结关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品P…...

LiveVIS视图库1400-如何切换数据库?默认使用的数据库是什么?如何切换到Mysql/MariaDB?
LiveVIS视图库1400-如何切换数据库?默认使用的数据库是什么?如何切换到Mysql/MariaDB? 1、切换成Mysql/Mariadb数据库1.1 连接数据库1.2 创建数据库实例1.3 配置.ini文件1.4 重启完成切换 1、切换成Mysql/Mariadb数据库 LiveVIS 默认使用 sqlite3 文件…...

【2023.11.24】Mybatis基本连接语法学习➹
基本配置 1.如果使用Maven管理项目,需要在pom.xml中配置依赖。 2.安装Mybatis-3.5.7.jar包 3.进行XML配置:这里将文件命名为mybatis-config.xml 配置数据库连接XML文件 <?xml version"1.0" encoding"UTF-8" ?> <!DO…...

如何防止网络被入侵?
随着互联网的普及,网络安全问题越来越受到人们的关注。其中,如何防止网络被入侵是一个重要的问题。本文将介绍一些防止网络被入侵的方法,帮助大家保护自己的网络安全。 一、使用强密码 强密码是防止网络被入侵的第一道防线。一个好的密码应该…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门  一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...

iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...

MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...