【每日刷题】Day16

news/2024/5/21 6:35:47

【每日刷题】Day16

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 24. 两两交换链表中的节点 - 力扣(LeetCode)

2. 160. 相交链表 - 力扣(LeetCode)

3. 136. 只出现一次的数字 - 力扣(LeetCode)

1. 24. 两两交换链表中的节点 - 力扣(LeetCode)

 //0ms  100%思路:创建新链表,malloc新节点按照题目所给顺序存储原链表节点,新链表逐个连接新节点

typedef struct ListNode LN;


 

 int ListNodeQua(LN* phead)//计算原链表节点数

 {

    LN* pmove = phead;

    int count = 0;

    while(pmove)

    {

        count++;

        pmove = pmove->next;

    }

    return count;

 }

struct ListNode* swapPairs(struct ListNode* head)

{

    if(head==NULL)

    {

        return NULL;

    }

    if(head->next==NULL)

    {

        return head;

    }


 

    int n = ListNodeQua(head);

    LN* sentry = (LN*)malloc(sizeof(LN));//新链表哨兵位

    LN* pmove = head;//原链表奇数位节点

    LN* pmove1 = sentry;//用于遍历新链表连接新节点

    int i = 0;

    while(i<n/2)//交换次数即为循环次数

    {

        LN* pmove2 = pmove->next;//原链表偶数位节点

        LN* pget1 = (LN*)malloc(sizeof(LN));//新节点1

        pget1 = pmove2;//存储原链表偶数位节点

        pmove1->next = pget1;//连接新节点

        pmove1 = pmove1->next;//往后遍历以连接下一个节点

        LN* pget2 = (LN*)malloc(sizeof(LN));//新节点2

        pget2 = pmove;//存储原链表奇数位节点

        pmove->next = pmove2->next;//这里需要注意,由于原链表奇数位节点的next指向后一个偶数位节点,而下面我们在让新链表连接新节点时,会导致相邻两个节点成环,因此这里需要在新链表连接新节点前让奇数位节点的next指向下一个奇数位节点

        pmove1->next = pget2;//连接新节点

        pmove1 = pmove1->next;//往后遍历以连接下一个节点

        pmove = pmove->next;//由于上面我们奇数位节点next指向了下一个奇数位节点,因此这里直接走向next即可进行下一个交换

        i++;

    }

    LN* phead = head;

    if(n%2==1)//如果链表个数为奇数个,则在最后一次交换后会遗漏下最后一个节点,这里只需要直接将最后一个节点连接上即可

    {

        while(phead->next)

        {

            phead = phead->next;

        }

        pmove1->next = phead;

    }

    return sentry->next;

}

2. 160. 相交链表 - 力扣(LeetCode)

//思路:根据题目要求我们容易想到用两个指针遍历两个链表,当指针相等时就是相交的起始节点,直接返回。但是也容易发现一个问题,链表的长度不是严格相等的,因此,若是两个指针都在第一个节点同时遍历则可能会错过。那么我们这里的思路就是如何让两个指针刚好相遇——让较长的链表的指针先走过两链表长度差值的节点数。

typedef struct ListNode LN;

int ListNodeQua(LN* phead)//计算链表节点数

{

    LN* pmove = phead;

    int count = 0;

    while(pmove)

    {

        count++;

        pmove = pmove->next;

    }

    return count;

}


 

int my_abs(int x,int y)//返回两链表节点数差值(正数)

{

    return x>y?x-y:y-x;

}


 

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)

{

    if(headA==NULL||headB==NULL)

    {

        return NULL;

    }

    LN* pf1 = headA;

    LN* pf2 = headB;

    int a = ListNodeQua(headA);//链表A的节点数

    int b = ListNodeQua(headB);//链表B的节点数

    int x = my_abs(a,b);//两链表节点数差值的绝对值

    int flag = a>b?1:0;//用于判断需要哪个链表的指针走

    while(x)

    {

        if(flag)//如果flag为1,则说明链表A较长,则让pf1的指针走过x个节点

        {

            pf1 = pf1->next;

        }

        else//否则则是链表B较长,让pf2走过x个节点

        {

            pf2 = pf2->next;

        }

        x--;

    }

    while(pf1&&pf2)//这时再让pf1、pf2同时走,相遇时直接返回

    {

        if(pf1==pf2)

        {

            return pf1;

        }

        pf1 = pf1->next;

        pf2 = pf2->next;

    }

    return NULL;

}

3. 136. 只出现一次的数字 - 力扣(LeetCode)

//思路:这里需要知道的知识——

1、0^上任何数都等于任何数本身

2、两个相同的数^起来等于0

知道了这两个知识后,这道题就变得非常简单,因为数组中只有一个数字出现一次,其余的数字均出现了两次,那么我们用一个数(初始为0)^上这个数组中的每一个数,相同的数^在一起变为0,则^到最后就会变成0^上那个只出现了一次的数,而0^上任何数等于任何数,则直接返回最终^的结果即可

int singleNumber(int* nums, int numsSize)

{

    int num = 0;

    for(int i = 0;i<numsSize;i++)

    {

        num^=nums[i];

    }

    return num;

}


http://www.mrgr.cn/p/74680110

相关文章

ruoyi框架修改

修改主题色topleft布局改为自定义topleft布局涉及到的文件 src/settings.js,src/layout/index.vue ,src/components/TopNav ,src/layout/components/Navbar.vue 避免修改原文件,将src/components/TopNav ,src/layout/components/Navbar.vue 同级目录下复制一份 分别重命名…

服务器之HP服务器带外口登录

前言HP服务器的管理口需要通过dhcp为其分配一个IP,通过笔记本配置同网段的IP进行连接。一、下载TFPTD软件-DHCP服务器(为笔记本和服务器dhcp分配IP地址)二、笔记本登录管理口

论文笔记:(INTHE)WILDCHAT:570K CHATGPT INTERACTION LOGS IN THE WILD

iclr 2024 spotlight reviewer 评分 5668 1 intro 由大型语言模型驱动的对话代理&#xff08;ChatGPT&#xff0c;Claude 2&#xff0c;Bard&#xff0c;Bing Chat&#xff09; 他们的开发流程通常包括三个主要阶段 预训练语言模型在被称为“指令调优”数据集上进行微调&…

2024/4/15考试题解

就是一篇普通的考试题解目录成绩报告A.排座位题目内容思路代码B.梦中的学校题目内容思路代码C.激突冲击题目内容思路代码D.奖学金题目内容思路代码 成绩报告T1说是快排,其实跟快排没有任何关系,就是单纯考了个语法。T2不会推式子,但是输出1有20分。T3不会差分约束(打拓扑排…

华为云CodeArts IDE For Python 快速使用指南

CodeArts IDE 带有 Python 扩展&#xff0c;为 Python 语言提供了广泛的支持。Python 扩展可以利用 CodeArts IDE 的代码补全、验证、调试和单元测试等特性&#xff0c;与多种 Python 解释器协同工作&#xff0c;轻松切换包括虚拟环境和 conda 环境的 Python 环境。本文简要概述…

【机器学习300问】71、神经网络中前向传播和反向传播是什么?

我之前写了一篇有关计算图如何帮助人们理解反向传播的文章&#xff0c;那为什么我还要写这篇文章呢&#xff1f;是因为我又学习了一个新的方法来可视化前向传播和反向传播&#xff0c;我想把两种方法总结在一起&#xff0c;方便我自己后续的复习。对了顺便附上往期文章的链接方…

Go--goland下载安装

下载地址:https://www.jetbrains.com/go/download/other.html 然后进行安装,将可选那一步全勾选 运行程序好,要设置激活码或者选择登陆账户,不然不可用,激活码可以网上找免费的 新建项目 将语言设置成中文,下载chinses插件,重新运行

Bounce 弹飞绵羊

某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装 置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则…

element的表格页面宽度变化问题 (防抖函数)

//表格问题(防抖函数) const debounce = (fn, delay) => { let timer = null; return function() { let context = this; let args = arguments; clearTimeout(timer); timer = setTimeout(function() { fn.apply(context, args); }, delay); } }const _R…

基于Django(python+sql)的校园二手交易系统设计与实现(完整程序+开题报告+论文)

随着互联网的迅猛发展&#xff0c;校园内的二手交易市场也逐渐呈现出蓬勃的发展态势。学生们在校园生活中会产生大量的闲置物品&#xff0c;而其他学生也有可能需要这些物品。本论文研究了校园二手交易系统的需求分析、系统实现和测试三个部分&#xff0c;旨在提高校园二手交易…

快速删除node_modules依赖包的命令rimraf

1、安装rimraf npm install -g rimraf 2、使用命令删除node_modules rimraf node_modules *** window系统&#xff0c;使用命令很快就删除node_modules ***

vim多行注释与取消

Step 1:在命令行模式下,将光标固定在第一列,按Ctrl+V快捷键进入VB可视化模式: Step 2:上下移动光标,选择你想要注释的行: Step 3: 选择好之后,按**大写的**I键进入 insert 模式,输入注释符“//”或“#”: 注意这里一定要按大写的I键,小写的是不行的。 Step 4:最…

Slf4j+Log4j简单使用

Slf4jLog4j简单使用 文章目录 Slf4jLog4j简单使用一、引入依赖二、配置 log4j2.xml2.1 配置结构2.2 配置文件 三、使用四、使用MDC完成日志ID4.1 程序入口处4.2 配置文件配置打印4.3 多线程日志ID传递配置 五. 官网 一、引入依赖 <dependencies><dependency><g…

MBR30100PT-ASEMI肖特基二极管MBR30100PT

MBR30100PT-ASEMI肖特基二极管MBR30100PT编辑:ll MBR30100PT-ASEMI肖特基二极管MBR30100PT 型号:MBR30100PT 品牌:ASEMI 封装:TO-247 最大平均正向电流(IF):30A 最大循环峰值反向电压(VRRM):100V 最大正向电压(VF):0.54V~0.92V 工作温度:-40C~170C 反向恢复时间:…

脑图系列-操作系统

打开电源操作系统做了什么? 加载BIOS 当计算机插上电源时,计算机主板的BIOS开始工作。BIOS会进行POST(Power-On Self-Test)自检,检测计算机的硬件是否正常,包括处理器、内存、硬盘、显卡、网卡等设备。如果有问题,则会在屏幕上显示错误信息。 加载引导程序 当自检完成后…

别让商业机密跑了:企业如何锁紧数据大门

Facebook 用户数据泄露:2018年,Cambridge Analytica公司非法获取了8700万Facebook用户的个人数据,并用于政治广告定向;Capital One 金融公司泄密:2019年,美国银行Capital One遭到黑客攻击,导致106万个加拿大用户的个人信息以及1亿名美国用户的信息泄露。这些事件凸显了数…

WPF中文网随笔(2)

常用布局控件Panel其实是一个抽象类,不可以实例化,WPF所有的布局控件都从Panel继承而来 public abstract class Panel : FrameworkElement, IAddChild 它继承于FrameworkElement基类和IAddChild接口。所以,所有 Panel 元素都支持 FrameworkElement 定义的基本大小调整和定位…

一次配置Docker环境的完整记录

一次配置Docker环境的完整记录 Docker环境搭建报错与解决报错一报错二报错三 Docker环境搭建 本节介绍了一次配置docker环境的完整记录&#xff1a; 编写Dockerfile文件&#xff1a; FROM pytorch/pytorch:1.10.0-cuda11.3-cudnn8-develRUN rm /etc/apt/sources.list.d/cuda.l…

Avalonia实现Visual Studio风格标题栏的方法

Visual Studio风格的标题栏可以更节省屏幕空间,个人认为其实比Ribbonbar和传统菜单都要更先进一些,更紧凑,利用效率更高。我在AvaloniaSamples项目中添加了一个这种Demo,展示了如何在Avalonia 11中分别实现经典风格、Macos风格和Visual Studio风格的标题栏:关键点就在于Ma…

基于Qt的二维码生成与识别

基于Qt的二维码生成与识别 一、获取QZxing开源库 1.通过封装的QZxing开源库生成和识别二维码&#xff0c;下载地址&#xff1a;GitCode - 开发者的代码家园https://gitcode.com/mirrors/ftylitak/qzxing/tree/master。 2.下载解压后&#xff0c;使用Qt Creator xx&#xff0…