Java 动态规划Leetcode 第7天

6 篇文章 0 订阅
6 篇文章 0 订阅

Java 动态规划Leetcode 第7天

1014. 最佳观光组合

给你一个正整数数组 values,其中 values[i] 表示第 i 个观光景点的评分,并且两个景点 ij 之间的 距离j - i

一对景点(i < j)组成的观光组合的得分为 values[i] + values[j] + i - j ,也就是景点的评分之和 减去 它们两者之间的距离。

返回一对观光景点能取得的最高分。

思路

动态规划来做。原式可以划为values[i]+i和values[j]-j,则我们可以划为两部分的最大值。这样的话,随着遍历数组,我们对两部分和取最大值,并且若当前的值—下标对之和比之前更大,我们就更新left部分的值即可。

class Solution {
    public int maxScoreSightseeingPair(int[] values) {
        int max=Integer.MIN_VALUE;
        int left=values[0]+0;
        for(int i=1;i<values.length;i++){
            max=Math.max(max,left+values[i]-i);
            left=Math.max(left,values[i]+i);
        }
        return max;
    }
}
121. 买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0

思路

思路同上

class Solution {
    public int maxProfit(int[] prices) {
        int max=0;
        int left=prices[0];
        for(int i=1;i<prices.length;i++){
            max=Math.max(max,prices[i]-left);
            left=Math.min(left,prices[i]);
        }
        return max;
    }
}
122. 买卖股票的最佳时机 II

难度简单1302

给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

**注意:**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

dp[i]0]表示第i天没有持有股票时的最高效益,dp[i]1]=表示第i天持有股票时的最高效益

dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]+prices[i]);
dp[i][1]=Math.max(dp[i-1][0]-prices[i],dp[i-1][1]);
class Solution {
    public int maxProfit(int[] prices) {
        int[][] dp=new int[prices.length][2];
        dp[0][0]=0;
        dp[0][1]=-prices[0];
        for(int i=1;i<prices.length;i++){
            dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]+prices[i]);
            dp[i][1]=Math.max(dp[i-1][0]-prices[i],dp[i-1][1]);
        }
        return dp[prices.length-1][0];
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值