学习算法打卡(一)

26 篇文章 0 订阅

滚动数组是动态规划中的一种思想,用固定的几个空间去迭代寻找解,以起到压缩空间的效果。

当然,他也因此牺牲了时间上的效率。

 滚动数组详解_哔哩哔哩_bilibili

一维的滚动数组,说白了DP题目是一个自底向上的扩展过程,我们只需要的是最终的结果的话,对过程的连续的解不需要的话,滚动数组优化是很有效的。利用滚动数组的话在N很大的情况下可以达到压缩存储的作用。 是 也是优化版本的斐波那数列的操作。

 比如说在这我们就可以拿斐波那数列来举例子,这里我们只需要开辟 dp[0] 、 dp[1]、dp[2]三个空间,用来循环:dp[0]是暂存的空间,而在此就把 0 + 1 = 1  赋值给了 第三个 dp[2] 也就是 表格中第二行第一列的 1 (  DP[0]   )。而后 DP【1】 =  1 + 1 = 2 ................以此不断循环而来

模板如下:

 for(i=2;i<xx;i++)//xx为具体情境下的参数
    {
        dp[0]= dp[1];
        dp[1]= dp[2];
        dp[2]= dp[0] + dp[1]; 
    }

扩展到二维:

 

 如上图:

    3 = 第二行第二列的 2 + 第一列的第二行 的 1

(其他可以自己推)

也就是 : DP[i][ j ] = DP [i-1][ j ] +DP [ i] [ j-1 ]

类似于此模板:

int i, j, d[100][100];
for(i = 1; i < 100; i++)
    for(j = 0; j < 100; j++)
        d[i][j] = d[i - 1][j] + d[i][j - 1];

6034.数组的三角之和

力扣

题目分析:此可以用一维滚数组的思想,直接模拟操作就行

int triangularSum(int* nums, int n){
    int i;
    while(n != 1) {
        for(i = 0; i < n - 1; ++i) {
            nums[i] = (nums[i] + nums[i+1] ) % 10;
        }
        --n;
    }
    return nums[0];
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值