黄梓财20191003015

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

题目:

单调递增最长子序列 
 设计一个O(n2)时间的算法,找出由n个数组成的序列的最长单调递增子序列。
 
递归方程式:
dp[i]是从0到n-1
dp[i]表示的是从第1个数字到第i+1个数字的最大递增子序列
 
dp[i] = max{ dp[j]+1 , dp[i] } (1<i<n &&  0 <=j<i)
这个是一个一维的数组,从左到右的填表,从1一直填到n-1(dp[0]能够确定为1的。不用填)
for(int i = 1; i < n; i++)
    {
        for(int j = i - 1; j >= 0; j--)
        {
            if(num[i] > num[j])
            {
                dp[i] = max(dp[j] + 1, dp[i]); 
                if(dp[i] > result)
                {
                    result = dp[i];
                }
            }
        }
    }

用到了两次循环,第一次是n-1,第二次一次从1到n-1所以O(n) = n^2

一维数组,所以空间复杂度S(n) = n.

 

动态规划这一章节已经结束了,从一开始不完全懵,到现在自己能够做题,对于动态规划的题目我感觉最难的部分就是理解题目,还有写出递归方程式,基本上主要写出了方程式,代码就不是问题了,只是有些时候要注意下方程式的情况是否全部都有包括进去,可能会遗漏一些比较特殊的情况。

 

结对编程:

感觉还好吧,基本都是先自己各自打自己的,有不会的话就直接去宿舍里问,然后一起讨论,比起个人学习来说的话效率高挺多的,因为网上的其实我并不能很好的看懂,不如别人讲来的清晰。

posted on 2020-10-31 16:30  黄梓财  阅读(81)  评论(0编辑  收藏  举报