当前位置: 首页 > news >正文

2024.8.23 刷题总结

2024.8.23

**每日一题**

198.打家劫舍,这道题是一道简单的入门动态规划问题,根据题目意思,我们不能取数组中相邻的元素然后还必须满足总结果最大,所以我们可以维护一个数组,用来保存在数组每个位置之前能取到的最大值,然后最后输出第n-1个元素的值即为答案。

转移公式如下:

 dp[i]=max(dp[i-2]+nums[i],dp[i-1]);

class Solution {
public:int rob(vector<int>& nums) {int n = nums.size();if(n==1) return nums[0];vector<int> dp(n,0);dp[0]=nums[0];dp[1]=max(nums[0],nums[1]);for(int i = 2;i<n;i++){dp[i]=max(dp[i-2]+nums[i],dp[i-1]);}return dp[n-1];}
};

279.完全平方数,这道题考察的是动态规划的知识,依题意得,我们需要找到最少的平方数之和使得等于要求的数,我们首先会想到用离该数最近的完全平方数来考虑,但是这样不方便枚举和遍历,所以我们采用动态规划的一般方法,先处理前面的数,再遍历到后面的数。本题需要维护一个到当前位置需要最少完全平方数的数组,然后开始从1遍历到n,这期间需要枚举所有小于i的完全平方数用来找到最小的答案,每次循环起点将dp[i]设置为i,因为这是最多的情况,然后依次比较取最小值,转移方程如下:

 dp[i]=min(dp[i],dp[i-j*j]+1);

class Solution {
public:int numSquares(int n) {vector<int> dp(n+1,0);dp[0]=0;dp[1]=1;for(int i = 2;i<=n;i++){dp[i]=i;for(int j =1;j*j<=i;j++){dp[i]=min(dp[i],dp[i-j*j]+1);}}return dp[n];  }
};

 322.零钱兑换,这道题是考察动态规划的知识,本题也是仿照一般的动态规划的状态转移的思想来完成。首先我们需要维护一个数组表示达到每个金额需要的最少硬币数目,然后遍历求值,第一个状态为金额,从1遍历到n,第二个状态是用的硬币种类,从0遍历到数组末尾,如果当前金额一直低于硬币面额就继续,否则就更新当前所需数目最小值,最后输出所需金额的数目:

 dp[i]=min(dp[i],dp[i-coins[j]]+1);

class Solution {
public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount+1,amount+1);dp[0]=0;int n = coins.size();for(int i = 0;i<=amount;i++){for(int j = 0;j<n;j++){if(i-coins[j]<0) continue;dp[i]=min(dp[i],dp[i-coins[j]]+1);}}return (dp[amount]==amount+1) ? -1 : dp[amount]; }
};


http://www.mrgr.cn/news/6583.html

相关文章:

  • 【Linux】简易日志工具项目
  • 咸鱼之王手游内购修复无bug运营版联网架设+后台
  • laravel “Class \“Redis\“ not found“ 如何解决?
  • Objective-C中的广播站:深度解析NSNotificationCenter
  • NRC-SIM:基于Node-RED的多级多核缓存模拟器
  • 数据恢复技术-手动修复MBR-/NTFS分区
  • 来自科技时代的面试-AI面试
  • 自定义@ResponseBody以及SpringMVC总结
  • 维护和升级LabVIEW程序
  • VMWare中添加Ubuntu20.04.06镜像
  • 告别手动录入,自动化PDF转Excel工具精选
  • Python3学习(二)
  • 探索地理空间分析的新世界:Geopandas的魔力
  • java设计模式--组合模式、适配器模式
  • 克服编程挫折:从Bug的迷宫中寻找出口与面对算法保持冷静的策略
  • SpringCloud之一注册中心(Eureka)
  • jenkins最佳实践(一):jenkins安装与部署
  • 【机器学习】5. K近邻(KNN)
  • git cherry-pick 用法
  • uni-app01