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


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

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

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

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

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

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

    第一个可能取的元素可能是a[1]、a[2],假定我们第一个元素取a[1]。

    那么第二个应该取的元素可能是a[3]~a[m]。假定第二个取的元素时a[3]。

    那么第三个应该取的元素可能是a[5]~a[m]

    ... ...

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

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

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

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

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

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

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

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

    BFS:广度优先搜索。

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

  • 相关阅读:
    sqlserver2008导出表结构和数据
    使用adb命令对手机进行截屏保存到电脑
    android中控制多点同时触发时间
    使用Androi自带模拟器7.0版本无法安装apk解决
    Android library使用butterknife配置
    使用RadioGroup和fragment搭建项目框架填坑
    【转】BaseAdapter&DataSetObserver通知机制
    【转】读BaseAdapter的一点感悟
    使用Rxjava和Retrofit报错--01
    使用LeakCanary检测内存泄漏
  • 原文地址:https://www.cnblogs.com/niejunlei/p/13463921.html
Copyright © 2020-2023  润新知