关于《盛水最多的容器》问题的思考
在力扣 #11 问题里,我们可能会陷入这样的误区:装水的容器内部(即两侧的挡板之间)不能存在一个高于水平面的挡板。其实应该理解为,选中两块板,然后拆掉中间的所有板,求能放入由两者、
这个面积的表示可以用数学符号来表示,下面我们将这个问题数学符号化。设每个挡板的高度为
于是,问题转换为:设
刚看到这个问题的时候,我们很难不考虑遍历所有的可能性。这个方法一定可以找出最终的结果,但是却显得非常不优雅且低效。假设我们从
也就是:
即:把单次计算和比较看作一次原子操作,那么整个遍历过程的时间复杂度为
不妨考虑这样一种情况,如果我们已经知道最大值就在某个范围内,如何选择下一个值来进行比较?比如我们在某一次判断过程中,已知
方案一,考虑
情况 A,若
情况 B,若
可见,从
方案二,考虑
情况 A,若
情况 B,若
可见:
- 从较短的一边
位置的挡板切换到 时,如果 ,则 一定成立; - 而
时可能出现 的情况。
同理,若
综上,如果已知最大值在范围
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话