leetcode 2022年11月4日 打卡题 754. 到达终点数字
写在前面
首先感谢 @子不语 大佬发布的一元二次方程代码实现的启发。题解链接:子不语-754. 到达终点数字
本文侧重梳理如何由官方题解的时间复杂度为 O ( ∣ t a r g e t ∣ ) O(∣target∣) O(∣target∣)循环迭代方法向时间复杂度为 O ( 1 ) O(1) O(1)的一元二次方程方法的思路、流程的转化。
此外还对官方题解中一些省略的、自己有疑问的问题给出了证明过程。
供大家参考学习,欢迎大家共同交流,多多批评指正~
一、基础设定:
定义自然数的前 n n n项和: S n = n ( n + 1 ) 2 S_{n}= \frac{n(n+1)}{2} Sn=2n(n+1)
同时定义: S 0 = 0 S_{0}= 0 S0=0
设: d e l t a = S n − t a r g e t = n ( n + 1 ) 2 − t a r g e t delta=S_{n}-target= \frac{n(n+1)}{2}-target delta=Sn−target=2n(n+1)−target
二、解题思路:
当 S n S_{n} Sn从 n = 0 n=0 n=0 ~ n n n遍历过程中,
- 找到一个最小的 𝑛 𝑛 n,使得满足 S n = t a r g e t S_{n}=target Sn=target
- 找到一个最小的 𝑛 𝑛 n,使得满足 d e l t a = S n − t a r g e t > 0 delta=S_{n}−target>0 delta=Sn−target>0且 𝑑 𝑒 𝑙 𝑡 𝑎 𝑑𝑒𝑙𝑡𝑎 delta恰好是 0 0 0~ 𝑛 𝑛 n中的某几个数字之和的 2 2 2倍
三、规律探索:
毫无疑问,遍历过程中 d e l t a delta delta的值必先 < 0 <0 <0,最终可能遇到 = 0 =0 =0,也可能遇到 > 0 >0 >0。
① d e l t a delta delta由 < 0 <0 <0到 = 0 =0 =0:即等价于 t a r g e t target target恰好为某个前 n n n项和 S n S_{n} Sn
循环迭代过程如下图: ( t a r g e t = 10 ) (target=10) (target=10)
1. n = 0 n=0 n=0, d e l t a = S 0 − 10 = − 10 delta=S_{0}-10=-10 delta=S0−10=−10
2. n = 1 n=1 n=1, d e l t a = S 1 − 10 = 1 − 10 = − 9 delta=S_{1}-10=1-10=-9 delta=S1−10=1−10=−9
3. n = 2 n=2 n=2, d e l t a = S 2 − 10 = 3 − 10 = − 7 delta=S_{2}-10=3-10=-7 delta=S2−10=3−10=−7
4. n = 3 n=3 n=3, d e l t a = S 3 − 10 = 6 − 10 = − 4 delta=S_{3}-10=6-10=-4 delta=S3−10=6−10=−4
5. n = 4 n=4 n=4, d e l t a =