训练营第四十九天 | ● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II

2024-01-16 14:20

本文主要是介绍训练营第四十九天 | ● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 121. 买卖股票的最佳时机 

持有:第i-1天持有;第i天买入

不持有:第i-1天不持有;第i天卖出

代码随想录

class Solution {public int maxProfit(int[] prices) {//动态规划if(prices == null || prices.length == 0) return 0;int n = prices.length;int[][] dp = new int[n][2];dp[0][0] = -prices[0];dp[0][1] = 0;for(int i = 1; i < n; i++) {dp[i][0] = Math.max(dp[i-1][0], -prices[i]);//持有:第i-1天持有;第i天买入dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0] + prices[i]);//不持有:第i-1天不持有;第i天卖出}return dp[n-1][1];}
}
class Solution {public int maxProfit(int[] prices) {//动态规划滚动数组if(prices == null || prices.length == 0) return 0;int n = prices.length;int[][] dp = new int[2][2];dp[0][0] = -prices[0];dp[0][1] = 0;for(int i = 1; i < n; i++) {dp[i%2][0] = Math.max(dp[(i-1)%2][0], -prices[i]);//持有:第i-1天持有;第i天买入dp[i%2][1] = Math.max(dp[(i-1)%2][1],dp[(i-1)%2][0] + prices[i]);//不持有:第i-1天不持有;第i天卖出}return dp[(n-1)%2][1];}
}
class Solution {public int maxProfit(int[] prices) {//动态规划滚动一维数组if(prices == null || prices.length == 0) return 0;int n = prices.length;int[] dp = new int[2];dp[0] = -prices[0];dp[1] = 0;for(int i = 1; i < n; i++) {dp[1] = Math.max(dp[1],dp[0] + prices[i]);//不持有:第i-1天不持有;第i天卖出dp[0] = Math.max(dp[0], -prices[i]);//持有:第i-1天持有;第i天买入//注意顺序不能颠倒,因为dp[1]包含前一天的dp[0],若交换顺序,会更新当天的dp[0],不能保证dp[1]的取值}return dp[1];}
}
class Solution {public int maxProfit(int[] prices) {//贪心,找到最左最小值,最右最大值int res = 0;int low = Integer.MAX_VALUE;for(int i = 0; i < prices.length; i++) {low = Math.min(low, prices[i]);res = Math.max(res, prices[i] - low);}return res;}
}
class Solution {public int maxProfit(int[] prices) {//暴力int res = 0;for(int i = 0; i < prices.length; i++) {for(int j = i + 1; j < prices.length; j++) {res = Math.max(res, prices[j] - prices[i]);}}return res;}
}

 122.买卖股票的最佳时机II  

持有:第i-1天持有;第i天买入

不持有:第i-1天不持有;第i天卖出

与上题区别在于持有状态考虑买入时要加上前一天的不持有的钱数。即dp[0] = Math.max(dp[0], dp[1] - prices[i]);

代码随想录

class Solution {public int maxProfit(int[] prices) {//动态规划滚动一维数组if(prices == null || prices.length == 0) return 0;int n = prices.length;int[] dp = new int[2];dp[0] = -prices[0];dp[1] = 0;for(int i = 1; i < n; i++) {dp[0] = Math.max(dp[0], dp[1] - prices[i]);//持有:第i-1天持有;第i天买入dp[1] = Math.max(dp[1],dp[0] + prices[i]);//不持有:第i-1天不持有;第i天卖出}return dp[1];}
}

这篇关于训练营第四十九天 | ● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/612879

相关文章

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

股票数据接口-陈科肇

陈科肇 新浪财经 sz-深圳sh-上海历史分价表:http://market.finance.sina.com.cn/pricehis.php?symbol=sz000506&startdate=2016-12-27&enddate=2016-12-27历史成交明细(当日成交明细):http://vip.stock.finance.sina.com.cn/quotes_service/v

LeetCode:3177. 求出最长好子序列 II 哈希表+动态规划实现n*k时间复杂度

3177. 求出最长好子序列 II 题目链接 题目描述 给你一个整数数组 nums 和一个非负整数k 。如果一个整数序列 seq 满足在下标范围 [0, seq.length - 2] 中 最多只有 k 个下标i满足 seq[i] != seq[i + 1] ,那么我们称这个整数序列为好序列。请你返回 nums中好子序列的最长长度。 实例1: 输入:nums = [1,2,1,1,3],

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II 1.题目 1.1递增子序列 题目链接:491. 非递减子序列 - 力扣(LeetCode) 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0491.%E9%80%92%E

代码随想录算法训练营Day37|完全背包问题、518.零钱兑换II、377. 组合总和 Ⅳ、70. 爬楼梯(进阶版)

完全背包问题                  和01背包最大区别就是一个物品可以重复放多次,因此遍历空间时可以从前往后。 import java.util.*;public class Main{public static void main (String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt

代码随想录刷题day24丨93.复原IP地址 ,78.子集 , 90.子集II

代码随想录刷题day24丨93.复原IP地址 ,78.子集 , 90.子集II 1.题目 1.1复原IP地址 题目链接:93. 复原 IP 地址 - 力扣(LeetCode) 视频讲解:回溯算法如何分割字符串并判断是合法IP?| LeetCode:93.复原IP地址_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0093.%E5%A4%8