OJ第四篇

文章目录

  • 链表分割
  • 环形链表
  • 有效的括号

链表分割

链接: 链表分割
在这里插入图片描述

虽然这个题牛客网中只有C++,但是无所谓,我们只要知道C++是兼容C的就可以了

至于说这个题的思路,我们就弄两个链表,把小于x的结点放到一个链表中,剩下的放到另一个链表中,最后把两个链表串起来就可以了

实现方式的话有两种,一种是链表带哨兵位,一种是不带,带哨兵位的话处理起来比较简单,很多判断条件是不需要的,不带的话就相对要麻烦一些,但是你如果对链表的操作比较熟悉的话,其实还行

下面是带哨兵位的实现

class Partition {
public:ListNode* partition(ListNode* pHead, int x) {struct ListNode *cur=pHead;struct ListNode *head1,*head2,*tail1,*tail2;//1的是小值,2的是大值//开辟哨兵位head1=tail1=(struct ListNode *)malloc(sizeof(struct ListNode ));head2=tail2=(struct ListNode *)malloc(sizeof(struct ListNode ));
while(cur){struct ListNode *next=cur->next;if(cur->val<x){tail1->next=cur;tail1=tail1->next;tail1->next=NULL;}else{tail2->next=cur;tail2=tail2->next;tail2->next=NULL;}cur=next;
}
//把两个链表接到一起,如果第一个链表为空也无所谓
tail1->next=head2->next;struct ListNode *head=head1->next;free(head1);//没用的就free掉free(head2);
return head;}
};

下面是不带哨兵位的实现

class Partition {
public:ListNode* partition(ListNode* pHead, int x) {struct ListNode *cur=pHead;struct ListNode *head1=NULL,*head2=NULL,*tail1=NULL,*tail2=NULL;//一般都是定义两组指针,一组管理一个链表while(cur){struct ListNode *tmp=cur;cur=cur->next;if(tmp->val<x){
if(tail1==NULL){//如果链表为空head1=tail1=tmp;tail1->next=NULL;
}
else{tail1->next=tmp;tail1=tail1->next;tail1->next=NULL;
}}else{
if(tail2==NULL){head2=tail2=tmp;tail2->next=NULL;
}
else{tail2->next=tmp;tail2=tail2->next;tail2->next=NULL;
}}}//合并两个链表if(head1==NULL){//判断第一个表是否为空return head2;}else{tail1->next=head2;return head1;}}
};

环形链表

链接:环形链表
在这里插入图片描述

这个题的话需要一些数学推理去找它们之间的关系,要不然不太好说

我们假如说起始位置到入环处的距离为a,入环出到相遇处距离为b,环的周长为c,在之前,我们已经能判断一个链表中是否有环了,就是通过两个指针,一个fast一回走两步,一个slow一回走一步,那么它们两个之间有一定的数学关系,就是2*(a+b)=a+nc+b,化简一下为c-b+c(n-1)=a,这是什么意思啊?就是一个指针从头走,一个指针从相遇处走,以相同的速度,最后就会在那个相遇入环点相遇

下面我们来实现一下

struct ListNode *detectCycle(struct ListNode *head) {struct ListNode *fast=head,*slow=head;
while(fast&&fast->next){//能出循环就没有环,有环在循环中返回
fast=fast->next->next;
slow=slow->next;if(fast==slow){
struct ListNode *tmp=fast;
while(tmp!=head){//相同时停止,并返回这个点
tmp=tmp->next;
head=head->next;
}
return head;}
}
return NULL;
}

我们之前找过两个相交链表的相交位置,这里我们如果把相遇点的前一个位置的next置为空,就可以了,需要注意前一个只能是fast的前一个

下面我们来实现一下

//找相交点的函数
//思路就是计算两个链表的长度,长的先走差的长度数,最后同时走,相同了就找到了
struct ListNode *meetpoint(struct ListNode *s1,struct ListNode *s2){int num1=0;int num2=0;struct ListNode *head1=s1,*head2=s2;while(head1){num1++;head1=head1->next;}while(head2){num2++;head2=head2->next;}struct ListNode *thelong=s1,*theshort=s2;if(num2>num1){thelong=s2;theshort=s1;}int num=abs(num1-num2);//求差的长度数while(num){thelong=thelong->next;num--;}while(thelong!=theshort){thelong=thelong->next;theshort=theshort->next;}return thelong;
}struct ListNode *detectCycle(struct ListNode *head) {struct ListNode *fast=head,*slow=head;
while(fast&&fast->next){struct ListNode *fastprev=fast->next;//记录一下fast的上个位置
fast=fast->next->next;slow=slow->next;if(fast==slow){fastprev->next=NULL;return meetpoint(head,slow);}
}
return NULL;
}

有效的括号

链接:有效的括号
在这里插入图片描述

这个题是用栈来实现的,正好利用了栈的特性,左括号入栈,右括号判断出栈,如果不匹配就返回false

bool isValid(char * s){ST st;STInit(&st);
while(*s){if(*s=='('||*s=='['||*s=='{'){//左括号入栈STPush(&st,*s);}else{if(STEmpty(&st)){//栈为空并且要处理的字符为右括号STDestroy(&st);return false;}char tmp=STTop(&st);//匹配栈顶元素和要处理的元素if(*s==')'&&tmp!='('||*s==']'&&tmp!='['||*s=='}'&&tmp!='{'){return false;}else{STPop(&st);}}s++;
}
if(!STEmpty(&st)){//true的话最后栈应该为空
STDestroy(&st);return false;
}
else{STDestroy(&st);return true;
}
}

我们在这个函数之前是需要自己创建栈的,并且要实现它的一些功能,我们之前也有代码,可以看之前的博客
链接:栈和队列

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

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

相关文章

【c#】Quartz开源任务调度框架学习及练习Demo

Quartz开源任务调度框架学习及练习Demo 1、定义、作用 2、原理 3、使用步骤 4、使用场景 5、Demo代码参考示例 6、注意事项 7、一些Trigger属性说明 1、定义、作用 Quartz是一个开源的任务调度框架&#xff0c;作用是支持开发人员可以定时处理业务&#xff0c;比如定时…

python实现TCPclient

python实现TCPclient是一件简单的事情&#xff0c;只要通过socket这个模块就可以实现。 一、实现步骤 1、导入模块&#xff1a; 首先&#xff0c;你需要导入Python的socket模块。 import socket2、创建Socket对象&#xff1a; 使用socket.socket()函数创建一个新的socket对…

Flink学习---15、FlinkCDC(CDC介绍、案例实操)

星光下的赶路人star的个人主页 未来总是藏在迷雾中让人胆怯&#xff0c;但当你踏入其中&#xff0c;便会云开雾散 文章目录 1、CDC简介1.1 什么是CDC1.2 CDC的种类1.3 Flink-CDC 2、FlinkCDC案例实操2.1 开启MySQL Binlog并重启MySQL2.2 FlinkSQL方式的应用2.2.1 导入依赖2.2.2…

【Java 进阶篇】HTML DOM 事件详解

当用户在网页上点击按钮、输入文本、鼠标移动到某个区域或执行其他互动操作时&#xff0c;这些动作都可以触发事件。HTML DOM&#xff08;文档对象模型&#xff09;允许我们使用JavaScript来捕获、处理和响应这些事件&#xff0c;以实现网页的交互和动态性。本篇博客将围绕HTML…

iOS原生、Android 原生, flutter 三种方式给照片流添加文字(水印)

效果图:三中代码实现的效果差不多 Swift:代码 import UIKitclass ImageWatermarking: NSObject {static func textToImage(drawText text: String, inImage initImage: UIImage, atPoint point: CGPoint) -> UIImage {let textColor = UIColor.whitelet textFont = UIFon…

DPDK收发包流程分析

一、 前言 DPDK是intel工程师开发的一款用来快速处理数据包的框架,最初的目的是为了证明传统网络数据包处理性能低不是intel处理器导致的,而是传统数据的处理流程导致,后来随着dpdk的开源及其生态的快速发展,dpdk成为了高性能网络数据处理的优秀框架。本篇文章主要介绍DPDK…

Django实现音乐网站 ⒇

使用Python Django框架做一个音乐网站&#xff0c; 本篇音乐播放器-添加播放音乐功能实现。 目录 创建播放器数据表 设置表结构 执行创建表 命令 执行 数据表结构 添加单个歌曲 创建路由 加入播放器视图 模板处理 基类方法 子页面调用 优化弹窗 加入layui文件 基…

在URP管线中添加ShaderMaterial自定义GUI的方法

编写GUI面板 1. 新建GUI子面板 using UnityEngine; using UnityEngine.Rendering;namespace UnityEditor.Rendering.Universal.ShaderGUI {internal class CP_XXXOutLineGUI{public static class Styles{}public struct LitProperties{public LitProperties(MaterialProperty…

vxe-table添加排序

在 <vxe-column> 中添加sortable属性 <vxe-columnfield"longitude"sortabletitle"经度"></vxe-column><vxe-columnfield"latitude"sortabletitle"纬度"></vxe-column><vxe-columnfield"dateEst…

Spring Boot如何优雅实现动态灵活可配置的高性能数据脱敏功能

1.背景 在当下互联网高速发展的时代下&#xff0c;涉及到用户的隐私数据安全越发重要&#xff0c;一旦泄露将造成不可估量的后果。所以现在的业务系统开发中都会对用户隐私数据加密之后存储落库&#xff0c;同时还要求后端返回数据给前台之前进行数据脱敏。所谓脱敏处理其实就…

TikTok Shop美国本土店VS跨境店,如何选择?有何区别?

TikTok不仅仅是一个用于分享有趣短视频的平台&#xff0c;它也逐渐成为了商家们极力推广自己品牌和产品的场所。 在TikTok的商业生态系统中&#xff0c;存在几种不同的商店类型&#xff0c;各有其独特性和适用场景。今天&#xff0c;我们就来深入探讨这些店的差异与特点。 一、…

Si24R2|2.4G单发射芯片 +7dBm可调功率 校讯通

Si24R2是一种通用、低功耗、高性能的2.4GHz无线射频发射芯片&#xff0c;主要用于单向通信系统&#xff0c;以降低系统成B&#xff0c;在运行中与si24r1兼容。 Si24r2具有低功耗和低成B。 它主要用于单向低功率传输系统&#xff0c;如无线控制系统、无线数据采集系统等。 Si2…

在mysql8查询中使用ORDER BY结合LIMIT时,分页查询时出现后一页的数据重复前一页的部分数据。

这里写目录标题 问题描述&#xff1a;问题模拟&#xff1a;原因分析问题解释问题解决验证官方文档支持 问题描述&#xff1a; 在mysql8查询中使用ORDER BY结合LIMIT时&#xff0c;分页查询时出现后一页的数据重复前一页的部分数据。 问题模拟&#xff1a; 表table_lock_test&…

Milvus 介绍

Milvus 介绍 Milvus 矢量数据库是什么&#xff1f;关键概念非结构化数据嵌入向量向量相似度搜索 为什么是 Milvus?支持哪些索引和指标&#xff1f;索引类型相似度指标(Similarity metrics) 应用示例Milvus 是如何设计的&#xff1f;开发者工具API访问Milvus 生态系统工具 本页…

《数据结构、算法与应用C++语言描述》使用C++语言实现数组双端队列

《数据结构、算法与应用C语言描述》使用C语言实现数组双端队列 定义 队列的定义 队列&#xff08;queue&#xff09;是一个线性表&#xff0c;其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾&#xff08;back或rear&#xff09;&#xff0c;删除元素的那一…

【vue】el-carousel实现视频自动播放与自动切换到下一个视频功能:

文章目录 一、原因:二、实现代码:三、遇到的问题&#xff1a;【1】问题&#xff1a;el-carousel页面的视频不更新【2】问题&#xff1a;多按几次左按钮&#xff0c;其中跳过没有播放的视频没有销毁&#xff0c;造成再次自动播放时会跳页 一、原因: 由于后端无法实现将多条视频拼…

手机爬虫用Scrapy详细教程:构建高效的网络爬虫

如果你正在进行手机爬虫的工作&#xff0c;并且希望通过一个高效而灵活的框架来进行数据抓取&#xff0c;那么Scrapy将会是你的理想选择。Scrapy是一个强大的Python框架&#xff0c;专门用于构建网络爬虫。今天&#xff0c;我将与大家分享一份关于使用Scrapy进行手机爬虫的详细…

照片后期编辑工具Lightroom Classic 2024 mac中文新增功能

Lightroom Classic 2024&#xff08;lrC2024&#xff09;是专为摄影爱好者和专业摄影师设计的软件&#xff0c;它提供了全面的照片编辑工具&#xff0c;可以精准调整照片的色彩、对比度和曝光等参数&#xff0c;以便定制后期处理效果。 在lrC2024中&#xff0c;用户体验得到了提…

文件的逻辑结构(顺序文件,索引文件)

所谓的“逻辑结构”&#xff0c;就是指在用户看来&#xff0c;文件内部的数据应该是如何组织起来的。 而“物理结构”指的是在操作系统看来&#xff0c;文件的数据是如何存放在外存中的。 1.无结构文件 无结构文件:文件内部的数据就是一系列二进制流或字符流组成。无明显的逻…

SortedSet 和 List 异同点

SortedSet 在 Java 的整个集合体系中&#xff0c;集合可以分成两个体系&#xff0c;一个是 Collection 存储单个对象的集合&#xff0c;另一个是 k-v 结构的 Map 集合。 SortedSet 是 Collection 体系下 Set 接口下的派生类&#xff0c;而 Set 集合的特征是不包含重 复的元素的…