力扣笔试题(十一)

news2024/9/26 3:30:34

1、删除链表的中间节点

给你一个链表的头节点 head 。删除 链表的 中间节点 ,并返回修改后的链表的头节点 head 。

长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点(下标从 0 开始),其中 ⌊x⌋ 表示小于或等于 x 的最大整数。

对于 n = 1234 和 5 的情况,中间节点的下标分别是 0112 和 2

 

思路:首先是找到中间节点,并且需要一个指针跟踪中间节点的前一个节点

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* deleteMiddle(struct ListNode* head) {
    struct ListNode * slow = head;
    struct ListNode * pre = head;
    struct ListNode * fast= head;
   
    while(fast && fast->next){
        pre = slow;
        slow = slow->next;
        fast = fast->next->next;
    }

    if(slow == head){
        return NULL;
    }

    pre->next = slow->next;
            
    return head;
}

2、奇偶链表

给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。

第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。

请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。

你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。

 

 思路:先遍历奇数节点的指针,奇数节点的上一个指针是偶数指针,每次遍历将奇数指针摘出来,然后改变奇数指针的前一个指针的下一个值,偶数指针指向奇数指针的下一个值

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* oddEvenList(struct ListNode* head) {
    struct ListNode *fast = head;
    struct ListNode *slow = head;
    struct ListNode *pre = fast;
    if(!head){
        return NULL;
    }

    struct ListNode * tmp = head->next;
    while(fast && fast->next){
        pre = fast->next;
        fast = fast->next->next;
       
        if(fast){
            pre->next = fast->next;
            slow->next = fast;
            slow = slow->next;
        }          
    }    

    slow->next = tmp;
    

    return head;
}

3、反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode * p = head;
    struct ListNode *q = head;
    struct ListNode *next = NULL;

    if(!head){
        return NULL;
    }

    while(p){            
        /*初始化时先取第二个数据,改变第二个指针的时候需要先指向第三个指针,因为第二个指针改变会将下一个成员的指针改变*/
        if(p == head){
            p = p->next;    
        }

        if(p){   
            next = p->next;        
            p->next = q;
            q = p;
            p = next;
        }                        
    }      

    head->next = NULL;
    return q; 
}
4、链表最大孪生和

在一个大小为 n 且 n 为 偶数 的链表中,对于 0 <= i <= (n / 2) - 1 的 i ,第 i 个节点(下标从 0 开始)的孪生节点为第 (n-1-i) 个节点 。

  • 比方说,n = 4 那么节点 0 是节点 3 的孪生节点,节点 1 是节点 2 的孪生节点。这是长度为 n = 4 的链表中所有的孪生节点。

孪生和 定义为一个节点和它孪生节点两者值之和。

给你一个长度为偶数的链表的头节点 head ,请你返回链表的 最大孪生和 。

 

 思路:这个的难点是由于是单链表,无法实现头和尾两边遍历,所以去了一个巧,将链表的前半部分反转,后半部分不变,这样前半部分的第一个对应下半部分的第一个,所以后半段遍历完也意味着前半部分遍历完成

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

struct ListNode* reverseList(struct ListNode* head, struct ListNode*mid) {
    struct ListNode * p = head;
    struct ListNode *q = head;
    struct ListNode *next = NULL;

    if(!head){
        return NULL;
    }

    while(p != mid){            
        /*初始化时先取第二个数据,改变第二个指针的时候需要先指向第三个指针,因为第二个指针改变会将下一个成员的指针改变*/
        if(p == head){
            p = p->next;    
        }

        if(p != mid){   
            next = p->next;        
            p->next = q;
            q = p;
            p = next;
        }                        
    }      

    head->next = mid;
    return q; 
}

int pairSum(struct ListNode* head) {
    struct ListNode *p = head;
    struct ListNode *slow = head;
    struct ListNode *fast = head;
    struct ListNode *tmp = NULL;

    while(fast && fast->next){
        slow = slow->next;
        fast = fast->next->next;
    }     

    
    head = reverseList(head, slow);
    p = head;
    int max = 0;

    while(slow){
        if(max < p->val+slow->val){
            max = p->val + slow->val;
        }

        p = p->next;
        slow = slow->next;
    }

    return max;
}

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

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

相关文章

java开发的ai文生图程序。

这个源码支持Web、Android、IOS、H5等多终端应用。它使用ChatGPT模型实现智能聊天机器人&#xff0c;并支持绘图自动生成Vincent图。 支持自动绘画功能。

面试:ArrayList和LinkedList

ArrayList和LinkedList是什么&#xff1f; ArrayList&#xff1a; ArrayList是Java集合框架中的一个类&#xff0c;它实现了List接口&#xff0c;底层基于数组实现。ArrayList的特点是支持动态数组&#xff0c;可以自动扩容&#xff0c;适合顺序访问和随机访问。LinkedList&am…

一行命令搞定内网穿透

一行命令搞定内网穿透 一款开源免费的内网穿透工具&#xff1a;localtunnel &#xff0c;基于 nodejs 实现&#xff0c;无需修改 DNS 和防火墙设置&#xff0c;方便快捷的将内网服务暴露到外网&#xff0c;为开发人员、测试人员以及需要分享本地项目的人提供实时的公网访问方式…

Qt 快速部署环境(windeployqt.exe)

windeployqt.exe 是 Qt 框架提供的一个工具&#xff0c;主要用于将 Qt 应用程序部署到 Windows 环境中。它自动将所需的所有库、插件和文件复制到应用程序的目录中&#xff0c;以便用户能够直接运行应用程序&#xff0c;而无需额外的配置。 主要功能 自动识别依赖项&#xff…

《Milvus Cloud向量数据库指南》——高可用黄金标准:深入解析与业务策略

在当今这个数字化时代,系统的持续运行与稳定性已成为企业成功的关键因素之一。高可用性(High Availability, HA)作为保障系统稳定运行的重要策略,其重要性不言而喻。虽然高可用并不能承诺100%的无故障运行,但通过一系列精心设计的机制和技术手段,它能够极大地提升系统的可…

【颠覆数据处理的利器】全面解读Apache Flink实时大数据处理的引擎-上篇

什么是 Apache Flink&#xff1f; Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于对无界和有界数据流进行有状态计算。Flink 被设计为在所有常见的集群环境中运行&#xff0c;以内存速度和任何规模执行计算。 如何理解无界和有界数据&#xff1f; 无界数据&#…

Redis 安装篇(阿里云服务器)

操作系统用的是Alibaba Cloud Linux release 3 (Soaring Falcon)系统&#xff0c;可以通过命令&#xff1a;lsb_release -a 查看系统信息。 一、安装Redis 1.更新软件包 sudo yum update2.安装Redis sudo yum install redis3.启动Redis服务 sudo systemctl start redis4.设…

MiniCPM-V: A GPT-4V Level MLLM on Your Phone 手机上的 GPT-4V 级多模态大模型

GitHub - OpenBMB/MiniCPM-V: MiniCPM-V 2.6: A GPT-4V Level MLLM for Single Image, Multi Image and Video on Your Phone 2408.01800 (arxiv.org) 目录 Introduction Model Architecture Training End-side Deployment MiniCPM-V是一种高效的多模态大型语言模型&…

【Linux】常用指令集合

目录 1.who&#xff1a;查看使用云服务器的账号 2.pwd&#xff1a;显示当前所处的工作目录 3.ls&#xff1a;列出当前目录中的文件和子目录 ls 查看目录中的文件和子目录 ls -l 或者 ll 显示文件和目录的详细信息 ls -a 列出全部文件&#xff0c;包含隐藏文件 4.cd&#xf…

新火种AI|ChatGPT架构师突然离职!OpenAI为什么总留不住大佬和高手?

作者&#xff1a;小岩 编辑&#xff1a;彩云 8月6日&#xff0c;OpenAI内部再次传出人员大地震的消息。 根据Information的消息&#xff0c;OpenAI的联合创始人John Schulman突然官宣离职&#xff0c;而他要跳槽去的地方正是OpenAI的老冤家老对手——Anthropic。与此同时&am…

remote: Support for password authentication was removed on August 13, 2021.

remote: Support for password authentication was removed on August 13, 2021. 2021年8月13日 github修改了验证的方法&#xff0c;相关的密码不能够直接输入&#xff0c;需要通过相关的秘钥token进行输入。 因此我们需要在自己的账户生成对应的token才可以正常的在本地push对…

python-报数(赛氪OJ)

[题目描述] 有 n 人围成一圈&#xff0c;顺序排号。 从第 1 个人开始报数&#xff08;从 1 到 3 报数&#xff09;&#xff0c;凡是报到 3 的人退出圈子&#xff0c;问最后留下的是原来的第几号的那位。输入格式&#xff1a; 初始人数 n 。输出格式&#xff1a; 最后一人的初始…

在Jmeter中通过正则提取表达器和BeanShell提取器将接口返回的结果写入到指定txt文件中

jmeter 把响应结果数据写入到指定文件_jmeter输出返回结果到文件-CSDN博客 上面是参考链接 1、如图所示&#xff0c;需要在jmeter中将所有接口中返回的响应数据写入到指定的文件中 2、选择需要的接口右击-添加-后置处理器-正则表达式提取器&#xff1b; 3、在正则表达式提取器…

1.mysql-DDL-数据库操作

DDL-数据库操作定义语言 DML-数据库操作语言 DCL-数据库控制语言 DQL-数据库查询语言 DDL-数据库操作 DDL-数据库操作- 查询 查询所有数据 SHOW DATABASES;查询当前数据库 SELECT DATABASE();DDL-数据库操作- 创建 CREATE DATABSE [IF NOT EXISTS] 数据库名 [ DEFAULT CHA…

Haproxy搭建Web群集(群集)

HAProxy是一个使用C语言编写的自由及开放源代码软件&#xff0c;其提供高可用性、负载均衡&#xff0c;以及基于TCP和HTTP的应用程序代理。 HAProxy特别适用于那些负载特大的web站点&#xff0c;这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上&#xff0c;…

“订单循环激励:企业增长新引擎“

在当今竞争白热化的市场洪流中&#xff0c;如何独辟蹊径&#xff0c;让您的企业成为万众瞩目的焦点&#xff0c;吸引并留住海量用户的心&#xff1f;今天&#xff0c;让我们深入探索一种革命性的营销新策略——“订单循环激励模式”&#xff0c;它不仅能够激发用户的参与热情&a…

【大模型学习】快速下载大模型权重和评估大模型占用显存

一、下载模型 1.1 使用Hugging Face Hub下载模型 首先&#xff0c;我们需要设置环境变量以使用镜像站点加速下载。 主要要先安装相应的函数库&#xff1a; pip install huggingface_hub import os os.environ[HF_ENDPOINT] https://hf-mirror.com from huggingface_hub i…

【Redis】持久化机制最全解析

RDB持久化 RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;。通过将Redis数据集的快照保存到磁盘上的二进制文件中来实现。生成 RDB 文件的过程可以通过手动命令或自动触发。 实现原理 开始 BGSAVE&#xff1a; Redis 主进程接收到 BGSAVE 命…

【数据结构】五、树:2.二叉树(完全二叉树、前中后序遍历)

二、二叉树Binary tree 文章目录 二、二叉树Binary tree1.逻辑结构1.1斜树1.2满二叉树❗1.3完全二叉树1.4排序二叉树BST1.5平衡二叉树AVL1.6线索二叉树 2.性质3.存储结构3.1顺序存储3.2链式存储 4.遍历4.1前序遍历4.1.1前序非递归方式 4.2中序遍历4.2.1中序非递归方式 4.3后序遍…

java 解析 PDF OFD 发票 部分文字缺失

1、pdfbox https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox 到这里用最新的版本 最近碰到发票各式各样&#xff0c;千奇百怪&#xff1a;记录其中一个 解析出来是&#xff1a;缺少一个通字 发票好几处都缺少文字&#xff0c;解析出来的是 一个 圆点 原因&…