羊的学习日记(4.25)动态规划简单问题

69 阅读2分钟

4.25(复习算法--动态规划)

今天复习算法,因为在看小说,入迷了,怠慢了项目,只好看看算法喽~~~

动态规划问题,暂时还写的简单的,难的还没来得及去观摩,只能说是观摩,毕竟学习算法就是看别人怎么写代码,然后恍然大悟:“哦~原来是这样!”

杨辉三角

主要根据上一层数据得到下一层数据,问题关键主要在于如何获取上一层数据的所有索引,虽然遍历当前层数都很简单,但是一说起使用之前循环的变量,一搞动态就有人一脸懵,一般来说在js中如果你变量数组,首先想到是map或者是forEach那么你会很作难,实际上使用for in,for循环页消耗不了多少时间复杂度。


var generate = function(numRows) {
    //声明结果变量
    const ret =[]
    //双层循环嵌套容易获取上一层数据
    for(let i=0;i<numRows;i++){
        //声明新的一行的内存变量
        const row =new Array(i+1).fill(1)
        for(let j=1;j<row.length-1;j++){
            //根据上一行填充下一行变量
            row[j]=ret[i-1][j-1]+ret[i-1][j]
        }
        //直接将一行加入多维数组
        ret.push(row)
    }
    return ret
};

爬楼梯

爬楼梯实际上是根据之前计算的数据来得到后面的方法数,多少观察规律,或者直接找根本,第i个数等于之前两个数之和,arr[i]=arr[i-1]+arr[i-2]

1 1 2 3 5.。。。

var climbStairs = function(n) {
    let p=0,q=0,r=1
    for(let i=1;i<=n;++i){
        p=q
        q=r
        r=p+q
    }
    return r
};

其实做一些算法就会发现一些规律,还不完全,先写下来

顺序:

  1. 声明结果变量,存储结果,
  2. 声明所需变量,将你想到的数据都写出来,后面不需要再删除
  3. 需不需要辅助变量?这个比较难,,难想,多做就好
  4. 实现方式,需要用到索引就使用for,直接使用值就使用封装好的方法,map,forEach等,
  5. javaScript实现数据结构可能需要辅助函数,lodash
  6. 必须熟悉各种变量的声明方式,包括指针,set,map,等方法