分类一:dp
1、打家劫舍

class Solution {
int max = 0;
public int rob(int[] nums) {
int len = nums.length;
int[][] dp = new int[len+1][2];
//dp[i][0]表示要偷第i家
//dp[i][1]表示不偷第i家
dp[0][0] = 0;
dp[1][1] = 0;
dp[0][1] = 0;
for(int i=1;i<=len;i++){
//0表示要偷,1表示不偷
//第i个要偷,就说明i-1没有偷
dp[i][0] = dp[i-1][1] + nums[i-1];
dp[i][1] = Math.max(dp[i-1][0],dp[i-1][1]);
}
return Math.max(dp[len][0],dp[len][1]);
}
}
2、零钱兑换

这道题一时间没有想到dp[i]该表示什么…所以看了一下题解
class Solution {
public int coinChange(int[] coins, int amount) {
int len = coins.length;
int[] dp = new int[amount+1];
dp[0]=0;
for(int i=1;i<=amount;i++){
dp[i]=amount+1;
for(int j=0;j<len;j++){
if(i>=coins[j])

本文记录了作者在刷算法题时的心得体会,主要涉及动态规划问题,包括打家劫舍、零钱兑换、零钱兑换II、最长递增子序列和拦截导弹等题目。通过讲解不同的解法,如一维和二维DP,以及优化后的O(n*logn)解法,帮助读者理解动态规划的应用和优化策略。
最低0.47元/天 解锁文章
7345

被折叠的 条评论
为什么被折叠?



