对CF1904C的代码优化(复用性、指针转下标)
分讨,然后
1|0石山
代码运用了大量指针操作,各种特判,难以阅读,debug。
指的一提的是,我一开始又把 lower_bound
记成找 val
大于等于的第一个数组中的元素,后面想起来是找数组中第一个大于等于 val
的元素。影响到了其中一个迭代器的特判,改完才过。
过是过了,代码仍然是依托史。
2|0优化
-
先从最简单的复用性来看。
这段代码是找第一轮时的最小值,无论
还是 都是需要的,但我却在两个if
中写了两遍。直接把代码块提到
if
外。 -
再从思路上优化。
-
这一大坨特判,主要是我对于指针操作的ptsd。
- 比如第一个特判,我如果不加上,直接用第二个,如果第二个指针指向
end
,那就会出错。
- 比如第一个特判,我如果不加上,直接用第二个,如果第二个指针指向
-
一种行之有效的优化方式,不用指针。
-
把
lower_bound
返回的指针减去a.begin() + 1
,先转化为下标,之后都用下标角度考虑。这里注意,减去首指针之后,一定要加一,因为这个计算的是该元素到首指针的下标差,而我要求的是下标(我的下标从一开始)
-
对于第一个
if
,因为哪怕 lb 找不到大于等于val
的元素,返回a.begin() + n + 1
减去之后也是得到 ,正符合了我第一个特判用的 。这段代码等价于
-
对于后面几个
if
无非是找与value
左右相邻两个的元素找最小的解,然后其中一个if
判断如果在最左边,就不能找最左边的。用指针的话,左边还要用到prev
,而下标直接简单相减就行。
-
3|0优雅
-
__EOF__

本文作者:Kdlyh
本文链接:https://www.cnblogs.com/kdlyh/p/17978185.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/kdlyh/p/17978185.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
分类:
知识总结 / TRICK
, 做题报告(2023+)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下