前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一面动态规划,一面广度优先

一面动态规划,一面广度优先

作者头像
WindWant
发布2020-09-10 23:30:58
4310
发布2020-09-10 23:30:58
举报
文章被收录于专栏:后端码事后端码事

1、取数组an中不相邻的m个元素,使得其和最大

不要尝试去使用暴力破解,因为即使可能行得通,但通常也会受制于空间和时间的复杂度。

限制条件:一个数组、取不相邻的元素

取多少个,m个,不确定。是不是要取最多个?不确定。

不过有一点能够确定的是,第一个需要取的元素肯定是在第一个和第二个中间、最后一个需要取的元素肯定是在最后一个和倒数第二个。

好,从哪里开始?我们需要一个方向,一个基准点,不如从第一个需要取的元素开始。

第一个可能取的元素可能是a1、a2,假定我们第一个元素取a1。

那么第二个应该取的元素可能是a3~am。假定第二个取的元素时a3。

那么第三个应该取的元素可能是a5~am

... ...

你可能看到了,陷入了暴力枚举的路径了。

那么不如我们换个方向,从最后一个需要的确定的元素开始。

这里有一个区别,我们需要明确,当你确定了最后一个元素时,那么你的方案就完成了。

最后一个需要取的元素可以是 an-1 或 an,我们以 f(n) 来表示每一种可能的方案,那么我们的取数方案就是f(n) + f(n-1)。

好了,到此为止,我们得到了一个可以表示的结果:f(n) + f(n-1)。

是不是很熟悉,具体的算法方案,不再赘述,可以参考:台阶很高,青蛙跳不跳?

2、二叉树每层的最大元素

每层的最大元素,这是一个竖向遍历,横向对比的查找过程。或者更形象的,就像圣诞树上的环绕的彩带一般。

BFS:广度优先搜索。

1、存储每层找到的最大元素的容器。2、存储每层元素的容器,作为下一层的入口。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、取数组an中不相邻的m个元素,使得其和最大
  • 2、二叉树每层的最大元素
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档