逻辑算法题——思路感悟

最近在做一些逻辑算法题,以前在学校的相关课程比较水,一直没怎么做过比较考逻辑的算法题,一看到题就像用大量的for和if穷举,代码复杂度过高,各种TLE。

今天在第n次被正确答案吊打之后忽然有了一丝感悟,记下来留个纪念。


做逻辑算法题的时候首先要考虑结果的可能情况!比如:


1、是否有分界线可以让我们定出结果就在这个分界线的左面或者右面,如下题:

给定一个柱形图(每个柱子之间没有空隙),高度随机给出,宽度为固定值,求这些柱子可以构成的矩形的最大面积。

因为面积明显受制于最低的那个柱子的高度,设这个高度为l,所以以此为出发点发现了答案有三种情况:

1)最大面积包含当前最低的柱子,则面积肯定为l * n(n为总宽度及柱子的数目*单个宽度)

2)最大面积不包含当前最低柱子,则此时只有两种可能:

      在当前最小柱子的左面,此时计算左面区域的最大面积

      在当前最小柱子的右面,此时计算右面区域最大面积

之后比较三种情况的面积大小就可以得出最大面积,用递归的方法不断判断了,直至只有一个柱子的时候即可


2、是否可以通过(结果矩阵)相邻上下左右的值累加来逐步计算结果,经典动态规划问题里的找钱问题就属于这种

等等等等


ps:编完逻辑代码后最好带入几个简单的特殊例子尝试一下!比如一系列相同的值,一些特殊值:比如 1、0、2 什么的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值