动态规划:括号知多少

1 你会学到什么?

在上一消息推送中,我们通过《装水最多的容器》这个实际问题,初步了解了动态规划的魅力所在,还记得如果我们枚举所有可能的容器高度和边长时得到算法时间复杂度很大,而经过仔细分析目标函数和其变量关系时,我们发现把初始值设置为最大底边长度乘以相对小的高度后,之后的迭代中最大面积的容器只可能出现在尽可能高的情况下,如下动画所示,初始值为12,然后动态地交替地调整两个边(指针),目的是牺牲底的长度,尽量获得大的容器高度,从而得到更大的容器,果然在索引为2,和5时,容器的最大高度为 24 。

这里写图片描述

在本推送中,我们继续体验动态规划这个算法思想,领域经过仔细分析思考后的算法性能的优越,往往直观的第一下想到的算法不是很优秀的算法,当然排除那些大牛,毕竟他们已经形成了优秀算法的思维,这是我们努力的方向。

2 讨论的问题是什么?

讨论动态规划思想到底该怎么应用到实际问题当中。怎么拿到一个问题,然后就能想到用动态规划区解决呢?

这次探讨的这个实际问题,比较有意思,是给出一堆括号,让你分析出最长的括号长度,当然是辨识出有效的括号长度。

3 实际问题描述

先看原题,摘自LeetCode官网:

Given a string containing just the characters ‘(’ and ‘)’, find the
length of the longest valid (well-formed) parentheses substring.

For “(()”, the longest valid parentheses substring is “()”, which has
length = 2.

Another example is “)()())”, where the longest valid parentheses
substring is “()()”

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值