leetCode:121\122\309 股票買入和賣出獲取最大收益問題
/**leetCode 121 :動態規劃求 最佳買入和賣出股票 給出一組int陣列,每個值代表當天股票的價格,你只能買1次並且賣1次,求最大收益 動態規劃求解: */ int maxProfit(vector<int>& prices) { if(prices.size()==0) return 0; int buy = INT_MAX; int profit = 0; for(int i=0;i<prices.size();i++){ buy = min(buy,prices[i]); profit = max(profit,prices[i]-buy); } return profit; }
/**leetCode 122 :動態規劃求 最佳買入和賣出股票 給出一組int陣列,每個值代表當天股票的價格,你可以買入多次並賣出多次,但是買入之前必須先賣出,求最大收益 動態規劃求解: */ int maxProfit(vector<int>& prices) { if(prices.size()==0) return 0; int buy = INT_MAX; int profit = 0; int sum = 0; for(int i=0;i<prices.size();i++){ if(buy>=prices[i]){ buy = prices[i]; sum+=profit; profit=0; } if(profit<prices[i]-buy){ profit = prices[i]-buy; } else{ sum+=profit; profit=0; buy = prices[i]; } } sum+=profit; return sum; }
/**leetCode 309:與上面一樣,仍然計算股票的最大收益,可以完成多次交易,但是必須在買這個股票之前先賣掉它, 在你賣掉股票之後的一天是不能買股票的。 交易有三個狀態,buy,sell,rest; 定義buy[i]是前i天的任意序列以buy結尾的獲取的最大利潤 sell[i]是前i天的任意序列以sell結尾的獲取的最大利潤 rest[i]是前i天的任意序列以rest結尾的獲取的最大利潤 則buy[i] = max(rest[i-1]-prices[i],buy[i-1]); sell[i] = max(buy[i-1]+prices[i],sell[i-1]); rest[i] = max(buy[i-1],sell[i-1],rest[i-1]); 又因為 buy[i]<=rest[i], rest[i]<=sell[i]; 所以 rest[i] = sell[i-1]; 帶入最先定義的3個公式: buy[i] = max(sell[i-2]-prices[i],buy[i-1]); sell[i] =max(buy[i-1]+prices[i],sell[i-1]); */ int maxProfit2(vector<int>& prices) { int prebuy =0; int presell = 0; int buy =INT_MIN; int sell=0; for(int price:prices){ prebuy = buy; buy = max(presell-price,prebuy); presell = sell; sell = max(prebuy+price,presell); cout<<prebuy<<" "<<sell<<endl; } return sell; }
相關推薦
leetCode:121\122\309 股票買入和賣出獲取最大收益問題
/**leetCode 121 :動態規劃求 最佳買入和賣出股票 給出一組int陣列,每個值代表當天股票的價格,你只能買1次並且賣1次,求最大收益 動態規劃求解: */ int max
給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 如果你最多只允許完成一筆交易(即買入和賣出一支股票),設計一個算法來計算你所能獲取的最大利潤。
pan stat 給定 arr 註意 turn 大於 交易 nbsp 給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 如果你最多只允許完成一筆交易(即買入和賣出一支股票),設計一個算法來計算你所能獲取的最大利潤。 註意你不能在買入股票前賣出股票。 示例 1
leetcode 121 Best Time to Buy and Sell Stock(最大盈利)
題目要求(高頻題) 假設你有一個數組,其中第i個元素是第i天的股票價格。 如果您只被允許完成最多一筆交易(即買入並賣出一股股票),請設計演算法以找到最大利潤。 請注意,在購買之前不能出售股票。 解題思路 在陣列中尋找最大利潤,和leetcode 53 求最大子陣列是一種型別的題目
演算法:設計演算法以找到最大利潤。您可以根據需要完成儘可能多的交易(即,多次買入並賣出一股股票)
假設您有一個數組,其中第i個元素是第i天給定股票的價格。 設計演算法以找到最大利潤。您可以根據需要完成儘可能多的交易(即,多次買入並賣出一股股票)。 注意:您不能同時進行多筆交易(即,您必須在再次購買之前賣出股票)。 例1: 輸入: [7,1,5,3,6,4] 輸出: 7 說明:在第2天
LeetCode:121. Best Time to Buy and Sell Stock (找出股票的最大收益)
Say you have an array for which the ith element is the price of a given stock on day i. If
前端演算法:設計演算法以找到最大利潤。您可以根據需要完成儘可能多的交易(即,多次買入並賣出一股股票)
假設您有一個數組,其中第i個元素是第i天給定股票的價格。 設計演算法以找到最大利潤。您可以根據需要完成儘可能多的交易(即,多次買入並賣出一股股票)。 注意:您不能同時進行多筆交易(即,您必須在再次購買之前賣出股票)。 例1: 輸入: [7,1,5,3,6,4]
LeetCode:122. 買賣股票的最佳時機 II(C++)
題目: 給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 設計一個演算法來計算你所能獲取的最大利潤。你可以儘可能地完成更多的交易(多次買賣一支股票)。 注意:你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。 示例 1: 輸入: [7,1
Leetcode 121:買賣股票的最佳時機
原題:給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。如果你最多隻允許完成一筆交易(即買入和賣出一支股票),設計一個演算法來計算你所能獲取的最大利潤。注意你不能在買入股票前賣出股票。示例 1:輸入: [7,1,5,3,6,4] 輸出: 5 解釋: 在第 2 天
在股市的交易日中,假設最多可進行兩次買賣(即買和賣的次數均小於等於2),規則是必須一筆成交後進行另一筆(即買-賣-買-賣的順序進行)。給出一天中的股票變化序列,請寫一個程式計算一天可以獲得的最大收益。
思想來源於動態規劃,如果以arr[i]為第二個投資點,那麼,必須找到i-1前面的最大投資收益 class Stock { public: int maxProfit(vector<
leetcode——Best Time to Buy and Sell Stock III 買賣股票最大收益(AC)
element cti () -- 最大 leetcode price imu cto Say you have an array for which the ith element is the price of a given stock on day i. D
LeetCode——動態規劃——股票最大收益
股票最大收益 一、問題描述 給出每天股票的價格,設計一個演算法計算出最大收益。可以最多買賣兩個回合。而且賣出之後才能再買。 二、樣例 // 1 Input : [3, 3, 5, 0, 0, 3, 1, 4] Output : 6 Explanation : 0-3, 1-4
Leetcode 123:買賣股票的最佳時機III(最詳細的解法!!!)
給定一個數組,它的第 i 個元素是一支給定的股票在第 i 天的價格。 設計一個演算法來計算你所能獲取的最大利潤。你最多可以完成 兩筆 交易。 注意: 你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。 示例 1: 輸入: [3,3,5,0,0,3,1
Leetcode 123 Best Time to Buy and Sell Stock III 至多兩次買賣股票最大收益
題目描述 Say you have an array for which the ith element is the price of a given stock on day i. 假設你有一個數組,裡面記錄的是每一天的股票的價格。 Desig
leetcode--一個for迴圈找出陣列最大和次最大值
//給定一個數組,找出陣列中最大值和次最大值。要求在一個for迴圈裡實現 #include "stdafx.h" #include<iostream> using namespace st
Leetcode 124 Binary Tree Maximum Path Sum 二叉樹最大路徑和
原題連結 題目描述 Given a binary tree, find the maximum path sum. 給出一棵二叉樹,計算其最大路徑和。 The path may start and end at any node in the t
【BZOJ1280】Emmy賣豬pigs 最大流
mes 事先 == 經典 include sof 打開 鑰匙 zoj 【BZOJ1280】Emmy賣豬pigs Description Emmy在一個養豬場工作。這個養豬場有M個鎖著的豬圈,但Emmy並沒有鑰匙。顧客會到養豬場來買豬,一個接著一個。每一位顧客都會有一些豬
【bzoj1280】Emmy賣豬pigs 最大流
printf pig include clas using light 一行 front ans 題目描述 Emmy在一個養豬場工作。這個養豬場有M個鎖著的豬圈,但Emmy並沒有鑰匙。顧客會到養豬場來買豬,一個接著一個。每一位顧客都會有一些豬圈的鑰匙,他們會將這些豬圈打開
從輸入的值中獲取最大值和最小值,輸入0後結束(利用do_while boolean isRight來標識用戶輸入)
bool out 用戶 system efault 最大 pub string void mport java.util.Scanner; public class DoWhile2 {public static void main(String[] args) { int
[LeetCode] Maximum Width of Binary Tree 二叉樹的最大寬度
example imu idt count ted pla con integer out Given a binary tree, write a function to get the maximum width of the given tree. The wi
作業題:輸入4個整數,找出其中最大的數。用一個函數來實現. 分別使用結構化方法和函數嵌套的方法。
system 是否 進行 如果 div 使用 clu 函數 整型 之前在main()函數中的思路是: #include <iostream> using namespace std; int main(){ //求四個數中最大的數? /