剑指offer题解合集——Week2day7

文章目录

  • 剑指offerWeek2
    • 周日:链表中倒数第k个节点
      • AC代码
      • 思路:
    • 周日:链表中环的入口结点
      • AC代码
      • 思路:

剑指offerWeek2

周日:链表中倒数第k个节点

题目链接:链表中倒数第k个节点

输入一个链表,输出该链表中倒数第 k个结点。注意:
k >= 1;
如果 k大于链表长度,则返回 NULL;
数据范围:链表长度 [0,30]样例
输入:链表:1->2->3->4->5 ,k=2输出:4

AC代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* findKthToTail(ListNode* head, int k) {auto p = head;int n = 0;while (p) n ++ , p = p->next;if (n < k) return NULL;p = head;for (int i = 0; i < n - k; i ++ ) p = p->next;return p;}
};

思路:

整体思路

简单的模拟
先统计链表长度,然后判断长度和k的关系,如果合法则移动n - k次即可

周日:链表中环的入口结点

题目链接:链表中环的入口结点

给定一个链表,若其中包含环,则输出环的入口节点
若其中不包含环,则输出null
数据范围
节点 val 值取值范围 [1,1000]
节点 val 值各不相同
链表长度 [0,500]样例
[1, 2, 3, 4, 5, 6]
2
注意,这里的2表示编号是2的节点,节点编号从0开始。所以编号是2的节点就是val等于3的节点。
则输出环的入口节点3.

AC代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *entryNodeOfLoop(ListNode *head) {if (!head || !head->next) return 0;ListNode *first = head, *second = head;while (first && second){first = first->next;second = second->next;if (second) second = second->next;else return 0;if (first == second){first = head;while (first != second){first = first->next;second = second->next;}return first;}}return 0;}
};

思路:

整体思路

双指针算法的应用
思路:
定义快慢指针
慢指针走一步,快指针走两步
如果两个指针相遇,那么慢指针回到开头,然后只要两个指针不相遇,则两个指针一直各走一步有兴趣可以看下证明
证明如下:
设链表起点为A,且链表存在环,且链表中构成环的交点(环的入口)称之为B(脑补一下数字6)
假设在环中,快慢指针在C点相遇(此时不知道快指针绕了多少圈)
那么有线段AB,为出发点到构成环的交点已知:C点两指针相遇,且快指针的速度是慢指针的两倍
那么:
C点相遇时,慢指针走过的路程为A->B->C
此时让快慢指针都后退BC长度
则快指针退回到D点(D点还在环内,自行证明)
则有劣弧BD = 劣弧BC(结论1)
也就是圆环被B、C、D三点分割(非要脑补的话,就三等分吧,不影响)慢指针从A走到B经过了线段AB,此时快指针从A走到了D点,经过了线段AB + 优弧BD + 若干圈
由于劣弧BC = 劣弧BD(结论1),且劣弧CD是公共的
那么有线段AB的长度 = 优弧BD = 劣弧BC + 劣弧CD(结论2)所以:当快指针从环的入口B点开始走
经过线段AB的长度 + 劣弧BC的长度会重新回到B点(结论3)
(同义句:经过优弧BD的长度 + 劣弧BC的长度会重新回到B点)(线段AB的长度 = 优弧BD)(结论1)(此时已经走了一个圆了)
(同义句:经过优弧BD的长度 + 劣弧CD的长度会重新回到B点)(线段AB的长度 = 优弧BD)(结论2)因此快指针从C点出发,经过线段AB的距离,能到达B点
同义句:快指针从C点出发,沿着优弧BD,能到达B点(线段AB的长度 = 优弧BD)
同义句:快指针从C点出发,沿着优弧BC,能到达B点(劣弧BC = 劣弧BD(结论1),且劣弧CD是公共的)因此快指针从C点出发,经过线段AB的距离,能到达B点
同时,让慢指针从A点出发经过线段AB,也刚好到B点

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

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

相关文章

springboot 接收appsflyer 参数

1、官网登陆&#xff1a;hq1.appsflyer.com a、配置接收请求的地址和需要的事件 配置详情 2、Controller配置接收 RequestMapping(value "/req", method POST)ResponseBodypublic ResData req(RequestBody Map<String, String> map) {String jsonObject J…

一文搞懂什么是缓存穿透、缓存雪崩、缓存击穿三个概念,以及解决方案

先理解概念&#xff1a;【注&#xff1a;我们这里说的是分布式、高并发环境】 一、缓存穿透是什么&#xff1f; 缓存穿透是指&#xff1a;请求【可以有很多】的数据在缓存、关系型数据库中都不存在&#xff0c;每次来查询都会查询到关系型数据库中。 解决方案&#xff1a; 1、将…

CUMT--Java复习--核心类

目录 一、装箱与拆箱 二、“”与equals 三、字符串类 1、String、StringBuffer、StringBuilder的区别 2、String类 3、StringBuffer类 4、StringBuilder类 四、类与类之间关系 一、装箱与拆箱 基本类型与对应封装类之间能够自动进行转换&#xff0c;本质就是Java的自…

强烈推荐 25个 前端开源中后台管理系统

作为程序员&#xff0c;构建一套个人专属的后台管理系统非常重要。这不仅是为了打造自己独有的开发生态&#xff0c;更是因为我们正处于个人开发和AI模型泛滥的时代。利用AI增强自己的系统变得尤为关键。然而&#xff0c;在UI界面设计方面&#xff0c;我们可能需要参考开源项目…

mysql原理--Explain详解

1.概述 一条查询语句在经过 MySQL 查询优化器的各种基于成本和规则的优化会后生成一个所谓的 执行计划 &#xff0c;这个执行计划展示了接下来具体执行查询的方式&#xff0c;比如多表连接的顺序是什么&#xff0c;对于每个表采用什么访问方法来具体执行查询等等。设计 MySQL 的…

实时交通标志检测和分类(代码)

交通标志检测和分类技术是一种基于计算机视觉和深度学习的先进技术&#xff0c;能够识别道路上的各种交通标志&#xff0c;并对其进行分类和识别。这项技术在智能交通系统、自动驾驶汽车和交通安全管理领域具有重要的应用前景。下面我将结合实时交通标志检测和分类的重要性、技…

第9章 继承和派生习题(详解)

一、选择题 1&#xff0e;下列表示引用的方法中&#xff0c; &#xff08;&#xff09; 是正确的。已知&#xff1a;int m10&#xff1a; A&#xff0e;int &xm&#xff1b; B&#xff0e;int &y10&#xff1b; C&#xff0e;int &z&#xff1b; D&#xff0e;fl…

Java中利用Redis,ZooKeeper,数据库等实现分布式锁(遥遥领先)

1. 分布式锁 1.1 什么是分布式锁 在我们进行单机应用开发涉及并发同步的时候&#xff0c;我们往往采用synchronized或者ReentrantLock的方式来解决多线程间的代码同步问题。但是当我们的应用是在分布式集群工作的情况下&#xff0c;那么就需要一种更加高级的锁机制&#xff0…

合伙企业法关于合伙企业的要求

合伙协议可以载明合伙企业的经营期限和合伙人争议的解决方式。 合伙协议经全体合伙人签名、盖章后生效。合伙人依照合伙协议享有权利&#xff0c;承担责任。 经全体合伙人协商一致&#xff0c;可以修改或者补充合伙协议。 申请合伙企业设立登记&#xff0c;应当向企业登记机关提…

个人信息出境标准合同备案政策解读、案例分析与合规指引

文章目录 前言一、政策背景1、 政策解读2、适用范围3、《标准合同办法》和《备案指南》的适用范围二、备案方式三、备案流程四、两种数据出境合规方式对比五、标准合同备案“三步走”合规指引路线六、总结前言 本文将结合《备案指南》和各地备案指引,解读备案规定要求、分析各…

git rebase应用场景三

文章目录 git rebase应用场景三 git rebase应用场景三 在我们的开发分支中 假设我们修改一个文件 提交一个版本 再回到master分支 同时也去修改1.txt文件&#xff0c;提交一个版本 这样相当于master分支提交了一次&#xff0c;dev也提交了一次 然后回到dev分支 此时会报错…

事务失效的十种常见场景

学习事务失效场景 1 概述 事务的传播类型isolationTransactionnal注解属性 事务方法未被Spring管理方法使用final类型修饰非public修饰的方法同一个类中的方法相互调用方法的事务传播类型不支持事务异常被内部catch&#xff0c;程序生吞异常数据库不支持事务未配置开启事务错…

【Linux】修复 Linux 错误 - 主机已关闭

修复 Linux 错误 - 主机已关闭 在使用 Linux 操作系统时,有时会遇到一些错误。其中一个常见的错误是“主机已关闭”(Host is down)。当您尝试连接到另一台计算机或服务器时,可能会收到此错误消息。本文将介绍如何诊断和修复此错误。 1. 检查网络连接 首先,您需要确保您…

【ChatGPT 默认强化学习策略】PPO 近端策略优化算法

PPO 近端策略优化算法 PPO 概率比率裁剪 演员-评论家算法演员-评论家算法&#xff1a;多智能体强化学习核心框架概率比率裁剪&#xff1a;逐步进行变化的方法PPO 目标函数的设计重要性采样KL散度 PPO 概率比率裁剪 演员-评论家算法 论文链接&#xff1a;https://arxiv.org…

Oracle-深入了解cache buffer chain

文章目录 1.Cache buffer chain介绍2.Buffer cache的工作原理3 Buffer chains4.Multi-versioning of Buffers5.Latches6.诊断CBC latch等待7.解决 CBC Latch等待 1.Cache buffer chain介绍 经常看到会话等待事件“latch&#xff1a;cache buffers chain”。 如果想知道意味着什…

FA对接FC流程

2、FA进行对接 &#xff08;1&#xff09;首先安装好AD域控服务器DHCPDNS&#xff08;注意&#xff0c;不要忘记了做DNS正反向解析&#xff0c;就是把已经安装了ITA的主机做解析&#xff09;&#xff0c;在里面创建域用户 &#xff08;2&#xff09;安装ITA和VAG/VLB&#xf…

SLAM学习入门--计算机视觉一

文章目录 计算机视觉IoU如何计算 mIoU?mAP计算机视觉 IoU IoU(Intersection over Union),又称重叠度/交并比。 1 NMS:当在图像中预测多个proposals、pred bboxes时,由于预测的结果间可能存在高冗余(即同一个目标可能被预测多个矩形框),因此可以过滤掉一些彼此间高重…

2024孙多勇®跨年演讲,重塑医美增长力,开启璀璨华章!

不谋万事者&#xff0c;不足谋一时&#xff1b;不谋全局者&#xff0c;不足谋一域。明者因时而变&#xff0c;智者随时而制。 12月31日-1月3日由汇成医美集团主办的&#xff0c;以“重塑医美增长力”为主题的第七届孙多勇跨年演讲暨「英雄2024」年度战略规划案&#xff0c;在中…

权威Scrum敏捷开发企业培训分享

课程简介 Scrum是目前运用最为广泛的敏捷开发方法&#xff0c;是一个轻量级的项目管理和产品研发管理框架。 这是一个两天的实训课程&#xff0c;面向研发管理者、项目经理、产品经理、研发团队等&#xff0c;旨在帮助学员全面系统地学习Scrum和敏捷开发, 帮助企业快速启动敏…

Keras加载预训练模型

Keras库提供了一种方便的方式来加载预训练模型。预训练模型通常是在大型数据集上训练的&#xff0c;如ImageNet&#xff0c;这些模型已经学习到了大量的特征和模式。通过加载预训练模型&#xff0c;我们可以利用这些学到的知识来加速我们的模型训练过程&#xff0c;或者直接使用…