the beginning of the loop

本文介绍了一种高效算法,用于找到循环链表中环的起始节点。通过使用两个速度不同的指针,最终能够在一次遍历后准确地定位到循环的开始位置。

注:出自cracking the coding interview 4ed

Given a circular linked list, implement an algorithm which returns node at the beginning of the loop.

DEFINITION
Circular linked list: A (corrupt) linked list in which a node’s next pointer points to an earlier node, so as to make a loop in the linked list.
EXAMPLE
Input: A -> B -> C -> D -> E -> C [the same C as earlier]

Output: C


If we move two pointers, one with speed 1 and another with speed 2, they will end up meeting if the linked list has a loop. Why? Think about two cars driving on a track—the faster car will always pass the slower one!
The tricky part here is finding the start of the loop. Imagine, as an analogy, two people racing around a track, one running twice as fast as the other. If they start off at the same place, when will they next meet? They will next meet at the start of the next lap.
Now, let’s suppose Fast Runner had a head start of k meters on an n step lap. When will they next meet? They will meet k meters before the start of the next lap. (Why? Fast Runner would have made k + 2(n - k) steps, including its head start, and Slow Runner would have made n - k steps. Both will be k steps before the start of the loop.)
Now, going back to the problem, when Fast Runner (n2) and Slow Runner (n1) are moving around our circular linked list, n2 will have a head start on the loop when n1 enters. Specifically, it will have a head start of k, where k is the number of nodes before the loop. Since n2 has a head start of k nodes, n1 and n2 will meet k nodes before the start of the loop.


So, we now know the following:
1. Head is k nodes from LoopStart (by definition).
2. MeetingPoint for n1 and n2 is k nodes from LoopStart (as shown above).
Thus, if we move n1 back to Head and keep n2 at MeetingPoint, and move them both at the same pace, they will meet at LoopStart.

                                                  

LinkedListNode FindBeginning(LinkedListNode head) {
 LinkedListNode n1 = head;
 LinkedListNode n2 = head;

 // Find meeting point
 while (n2.next != null) {
 n1 = n1.next;
 n2 = n2.next.next;
 if (n1 == n2) {
 break;
 }
 }

 // Error check - there is no meeting point, and therefore no loop
 if (n2.next == null) {
 return null;
 }

 /* Move n1 to Head. Keep n2 at Meeting Point. Each are k steps
 /* from the Loop Start. If they move at the same pace, they must
 * meet at Loop Start. */
 n1 = head;
 while (n1 != n2) {
 n1 = n1.next;
 n2 = n2.next;
 }
 // Now n2 points to the start of the loop.
 return n2;
29 }


内容概要:本文围绕基于CNN-Transformer混合模型的锂电池SOH(State of Health,健康状态)预测估计展开研究,提出一种融合卷积神经网络(CNN)与Transformer架构的深度学习方法,用于精准建模电池容量衰退过程。该方法充分发挥CNN在局部特征提取方面的优势以及Transformer在捕捉长时间序列依赖关系上的强大能力,有效提升了锂电池健康状态预测的准确性与稳定性。研究内容涵盖数据预处理、模型结构设计、训练优化流程及预测结果可视化等关键环节,适用于电池退化趋势分析与剩余使用寿命(RUL)评估,具有较强的工程应用价值。; 适合人群:具备Python编程能力和深度学习理论基础的高校研究生、科研人员及从事新能源电池管理系统开发的工程技术人才,特别适合聚焦于锂电池寿命预测、故障诊断与健康管理等方向的研究者。; 使用场景及目标:①掌握CNN与Transformer在时间序列回归任务中的协同建模机制;②实现高精度锂电池SOH预测模型构建与训练;③服务于电动汽车续航管理、储能系统运维决策与电池老化特性分析;④支持学术论文复现、科研项目验证及工业级电池管理算法开发。; 阅读建议:此资源以代码实践为核心驱动,建议读者结合所提供的完整Python代码进行动手实现,深入理解模型各模块的设计逻辑与训练技巧,并可通过调整网络结构或引入新数据集进一步拓展至其他时序预测任务中。
我们把同一标的(昆仑万维,现价 43.20 元,2026-07-31 收盘)交给三套系统,各出一份独立分析: **C 报告(CoordClaw 基于管理学多智能体系统)**——投研级。它由五个角色构成:周婷整合撰写、李静出基本面、王芳出技术面、赵明出风险、陈默做 PM 终审。最终产物是一份 38 项分级风险清单(P0×4 / P1×12 / P2×12 / P3×6 / 尾部×4)、双源交叉验证的财务数据(EM/Sina 差异 <0.01%)、严格的口径纪律,以及一份原样保留的"待核实"清单。结论冷冰冰:高风险,不建议参与。 **D 报告(DeepSeek)**——信息整理级。它把"4+3 AGI 战略"、天工 AI、Opera 浏览器、StarMaker 拆得很漂亮,核心财务数据(营收 81.98 亿、归母 -15.93 亿)也没算错。但整篇没有技术面、没有量化风控,更关键的是——它完全没提实控人已减持 75%、质押状态未知、净现金仅 15.19 亿且续航只有 1.26~1.81 年这些要命的负面。这是典型的"选择性呈现"。 **K 报告(Kimi)**——以对比评估的方式呈现。它搭起"数据准确性 / 分析维度 / 结论合理性"的三维框架,把几份材料放在一起对照,给出各自的强弱判定。它的维度意识比 D 报告更自觉,但作为一份独立分析,它对"评估方法本身的信度"交待不足,部分引用的核对也不够彻底。 结果两家的结论高度一致。C 报告(多智能体)被评投研级、居首;D 报告(DeepSeek 自己写的)被评信息整理级、居中;K 报告(Kimi 自己那份)维度较全但核验深度有限,排在两者之间。DeepSeek 的那份评估把 C 给了五星、D 三星、K 四星;Kimi 的那份评估也独立地把最高分给了 C。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值