贪心与暴力算法的解释
一、什么是暴力法?
暴力法就是把所有可能的两条线组合全部算一遍,找出最大面积。
比如数组[1,8,6,2,5,4,8,3,7](以双指针求最大水容积为例)
- 第 0 根 和 第 1 根 → 算面积
- 第 0 根 和 第 2 根 → 算面积
- 第 0 根 和 第 3 根 → 算面积
- ……
- 第 1 根 和 第 2 根
- 第 1 根 和 第 3 根
……
所有两量组合全部算一遍
缺点:时间复杂度O(n^2)
数组长度10万->要算100亿次,直接超时
二、什么是贪心?
贪心的意思就是:每一步都只做当前看起来最好、最有利的选择,不回头看,不全局计算。
一句话:
走一步看一部,每一步都选当前最优->最终得到全局最优。
贪心不是“全局”,而是每一步都做当下最好的选择。
这道题里“贪心移动指针”到底是什么意思?
规则只有一句话:
谁短,谁就往中间移动!
为什么要移动短的那一边?
盛水高度=短边决定
宽度=两条线距离
情况1:左边短
如果你移动长边:
宽度会变小
高度最多还是原来的短边高度
面积只会变小,不可能变大!
所以移动长边没用,必须移动短边,才有可能变高!
情况2:右边短
同理,必须移动右边(短边)往中间走,才可能遇到更高的线。
| 方法 | 思路 | 效率 | 能不能过 |
|---|---|---|---|
| 暴力法 | 全部算一遍 | O (n²) 慢 | 大数据量超时 |
| 贪心 | 每次移动短边,只算必要的 | O (n) 快 | 完美通过 |
总结:
暴力法:笨方法,全部算一遍,很慢。
贪心:聪明方法,每一步选当前最优,很快。
贪心移动指针:谁短谁往中间走,因为只有这样面积才可能变大
浙公网安备 33010602011771号