代码随想录算法训练营第36期DAY41

DAY41

动态规划理论基础

还差闫氏分析法没学完。见B站收藏夹。

前两题学习初始化方式就好vector<int> dp(N+1);

509斐波那契数

简单。

  1. class Solution {
  2. public:
  3.     int fib(int N) {
  4.         if (N <= 1return N;
  5.         int dp[2];
  6.         dp[0] = 0;
  7.         dp[1] = 1;
  8.         for (int i = 2; i <= N; i++) {
  9.             int sum = dp[0] + dp[1];
  10.             dp[0] = dp[1];
  11.             dp[1] = sum;
  12.         }
  13.         return dp[1];
  14.     }
  15. };

70爬楼梯

简单。

  1. class Solution {
  2. public:
  3.     int climbStairs(int n) {
  4.         if (n <= 1return n;
  5.         int dp[3];
  6.         dp[1] = 1;
  7.         dp[2] = 2;
  8.         for (int i = 3; i <= n; i++) {
  9.             int sum = dp[1] + dp[2];
  10.             dp[1] = dp[2];
  11.             dp[2] = sum;
  12.         }
  13.         return dp[2];
  14.     }
  15. };

746使用最小花费爬楼梯

不会做了,实在想不出来。

代码随想录官方解答:

现在会了。主要是状态转移的形式,学一下:

  1. class Solution {
  2. public:
  3.     int minCostClimbingStairs(vector<int>& cost) {
  4.     if(cost.size()==2return min(cost[0],cost[1]);
  5.     vector<intdp(cost.size()+1);
  6.     dp[0]=0,dp[1]=0;
  7.     for(int i=2;i<dp.size();i++){
  8.         dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
  9.     }
  10.     return dp[dp.size()-1];
  11.     }
  12. };

54螺旋矩阵

厦大保研夏令营考过,练一练。

终于过了,卡在记录该位置是否已经走过,用unordered_set, unordered_map显然都不行。想复杂了,用二维数组bool就好了。

  1.     class Solution {
  2.     public:
  3.         vector<intspiralOrder(vector<vector<int>>& matrix) {
  4.             vector<int> res;
  5.             int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
  6.             vector<vector<bool>> flag(matrix.size(),vector<bool>(matrix[0].size(),false));
  7.             int size=matrix.size()*matrix[0].size();
  8.             for(int x=0,y=0,d=0,k=1;k<=size;k++){
  9.                 flag[x][y]=true;
  10.                 res.push_back(matrix[x][y]);
  11.                 int a=x+dx[d],b=y+dy[d];
  12.                 if(a<0||a>=matrix.size()||b<0||b>=matrix[0].size()||flag[a][b]){
  13.                     d=(d+1)%4;
  14.                     a=x+dx[d],b=y+dy[d];
  15.                 }
  16.                 x=a,y=b;
  17.             }
  18.             return res;
  19.         }
  20.     };

59螺旋矩阵ii

厦大保研夏令营考过,练一练。ACWING语法基础课做过,再写一遍:

还是写不出来,不知道该怎么利用偏移量去更新。

加油吧:

  1. class Solution {
  2. public:
  3.     vector<vector<int>> generateMatrix(int n) {
  4.     int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
  5.     vector<vector<int>> res(n,vector<int>(n,0));
  6.     int mi=n*n;
  7.     for(int x=0,y=0,d=0,k=1;k<=mi;k++){
  8.         res[x][y]=k;
  9.         int a=x+dx[d],b=y+dy[d];
  10.         //撞墙或者走过了,不要漏了“走过”
  11.         if(a<0||a>n-1||b<0||b>n-1||res[a][b]){
  12.             d=(d+1)%4;
  13.             a=x+dx[d],b=y+dy[d];
  14.         }
  15.         x=a,y=b;
  16.     }
  17.     return res;
  18.     }
  19. };

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码随想录算法训练营是一个优质的学习和讨论平台,提供了丰富的算法训练内容和讨论交流机会。在训练营中,学员们可以通过观看视频讲解来学习算法知识,并根据讲解内容进行刷题练习。此外,训练营还提供了刷题建议,例如先看视频、了解自己所使用的编程语言、使用日志等方法来提高刷题效果和语言掌握程度。 训练营中的讨论内容非常丰富,涵盖了各种算法知识点和解题方法。例如,在第14天的训练营中,讲解了二叉树的理论基础、递归遍历、迭代遍历和统一遍历的内容。此外,在讨论中还分享了相关的博客文章和配图,帮助学员更好地理解和掌握二叉树的遍历方法。 训练营还提供了每日的讨论知识点,例如在第15天的讨论中,介绍了层序遍历的方法和使用队列来模拟一层一层遍历的效果。在第16天的讨论中,重点讨论了如何进行调试(debug)的方法,认为掌握调试技巧可以帮助学员更好地解决问题和写出正确的算法代码。 总之,代码随想录算法训练营是一个提供优质学习和讨论环境的平台,可以帮助学员系统地学习算法知识,并提供了丰富的讨论内容和刷题建议来提高算法编程能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [代码随想录算法训练营每日精华](https://blog.csdn.net/weixin_38556197/article/details/128462133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值