首页 > 其他分享 >[代码随想录]Day42-动态规划part10

[代码随想录]Day42-动态规划part10

时间:2023-09-12 10:11:06浏览次数:42  
标签:return int max part10 随想录 lens prices Day42 dp

题目:121. 买卖股票的最佳时机

思路:

贪心做起来更简单;dp多此一举……状态0是有买入,状态1是

代码:

func maxProfit(prices []int) int {
    lens := len(prices)
    if lens == 0 {
        return 0
    }
    dp := make([][]int, lens)
    for i := 0; i < lens; i++ {
        dp[i] = make([]int, 2)
    }
    dp[0][0] = -prices[0]
    dp[0][1] = 0
    for i:=1; i < lens;i++ {
        dp[i][0] = max(dp[i-1][0],-prices[i])
        dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i])
    }
    return dp[lens-1][1]
}
func max(a,b int)int{
    if a > b{
        return a
    }
    return b
}

参考:

代码随想录

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

思路:

也是贪心简单,具体参考Day28的贪心
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i])今天持有的状态取决于:

  1. 昨天持有
  2. 昨天不持有,今天买
    dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i])今天不持有的状态取决于:
  3. 昨天不持有
  4. 昨天持有,今天卖了

代码:

func maxProfit(prices []int) int {
    dp := make([][]int, len(prices))
    status := make([]int, len(prices) * 2)
    for i := range dp {
        dp[i] = status[:2]
        status = status[2:]
    }
    dp[0][0] = -prices[0]
    
    for i := 1; i < len(prices); i++ {
        dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i])
        dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i])
    }
    
    return dp[len(prices) - 1][1]
}
func max(a,b int ) int {
    if a > b {
        return a
    }
    return b
}

参考:

代码随想录

标签:return,int,max,part10,随想录,lens,prices,Day42,dp
From: https://www.cnblogs.com/wtcsky/p/17695283.html

相关文章

  • 代码随想录算法训练营第五天
    代码随想录算法训练营第五天|LeetCode242(有效的字母异位词)LeetCode349(两个数组的交集)LeetCode202(快乐数)LeetCode1(两数之和)242:有效的字母异位词LeetCode242(有效的字母异位词)classSolution{publicbooleanisAnagram(Strings,Stringt){......
  • 代码随想录:● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98
     654.最大二叉树 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个......
  • 代码随想录算法训练营-回溯算法|491.递增子序列
    491. 递增子序列 不对原数组进行排序,利用set对同层的子集进行去重。1classSolution:2deffindSubsequences(self,nums):3result=[]4path=[]5self.backtracking(nums,0,path,result)6returnresult78......
  • 代码随想录算法训练营第四天| 24. 两两交换链表中的节点, 19.删除链表的倒数第N个结点
    24.两两交换链表中的节点mydemo(超时)/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode(intx):val(x),next(nullptr){}*ListNode(intx,Lis......
  • 代码随想录算法训练营第三天| 203.移除链表元素 707.设计链表 206.反转链表
    203.移除链表元素链表定义structListNode{intval;ListNode*next;ListNode():val(0),next(NULL){};ListNode(intx):val(x),next(NULL){};ListNode(intx,ListNode*next):val(x),next(next){};}1.在原链表上移除链表元素classSolut......
  • [代码随想录]Day40-动态规划part08
    题目:139.单词拆分思路:单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满。拆分时可以重复使用字典中的单词,说明就是一个完全背包!动规五部曲分析如下:确定dp数组以及下标的含义:dp[i]:字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字......
  • 代码随想录刷题记录——栈与队列篇
    栈与队列理论基础 栈stack:先进后厨队列queue:先进先出STL(C++标准库)STL栈和队列属于容器适配器(containeradapter)优先队列priority_queue:默认大根堆,如果是pair<a,b>,默认比较a大小如果需要比较b大小,且小根堆,可以如下实现232.用栈实现队列题目链接 pop操作时,当......
  • 代码随想录算法训练营第二天| 977.有序数组的平方,209.长度最小的子数列,59.螺旋矩阵Ⅱ
    977.有序数组的平方双指针法因为负数平方后也会变大,所以较大的平方值只可能在靠近两端的位置,越往中间走平方值必定越小。所以,在原数组两端各定义一个指针,慢慢往中间走,然后把平方值按顺序放到新数组里即可。classSolution{public:vector<int>sortedSquares(vector<i......
  • 代码随想录刷题记录——双指针篇
    27.移除元素题目链接快慢指针,最终返回index值为移除元素后的数组末尾元素下标+1.#include<vector>usingnamespacestd;classSolution{public:intremoveElement(vector<int>&nums,intval){//快慢指针intnums_length=nums.size();......
  • 代码随想录个人笔记——字符串篇
    344.反转字符串 题目链接#include<bits/stdc++.h>usingnamespacestd;classSolution{public:voidreverseString(vector<char>&s){intlen=s.size();for(inti=0,j=len-1;i<j;i++,j--){//第一种//i......