DP31. 买卖股票的最好时机(二)
描述
输入描述
输出描述
输出最大收益示例1
输入:
7 8 9 2 5 4 7 1
输出:
7
说明:
在第1天(股票价格=8)买入,第2天(股票价格=9)卖出,获利9-8=1示例2
输入:
5 5 4 3 2 1
输出:
0
说明:
由于每天股票都在跌,因此不进行任何交易最优。最大收益为0。示例3
输入:
5 1 2 3 4 5
输出:
4
说明:
第一天买进,最后一天卖出最优。中间的当天买进当天卖出不影响最终结果。最大收益为4。Rust 解法, 执行用时: 8ms, 内存消耗: 2228KB, 提交时间: 2022-04-01
use std::io; fn main() { let mut n = String::new(); io::stdin().read_line(&mut n).expect("Failure"); let n:i32 = n.trim().parse().expect("Failure"); let mut prices = String::new(); std::io::stdin().read_line(&mut prices).unwrap(); let prices = prices.trim() .split_whitespace() .map(|s| s.parse::<i32>().unwrap()) .collect::<Vec<i32>>(); println!("{}", max_profit(prices)); } fn max_profit(prices: Vec<i32>) -> i32 { let n = prices.len(); if n < 2 { return 0i32; } let mut dp = vec![[0;2]; n]; for i in 0..n { if i == 0 { dp[i][1] = -prices[i] } else { dp[i][0] = dp[i-1][0].max(dp[i-1][1] + prices[i]); dp[i][1] = dp[i-1][1].max(dp[i-1][0] - prices[i]); } } dp[n-1][0] }
C 解法, 执行用时: 13ms, 内存消耗: 672KB, 提交时间: 2022-03-12
#include <stdio.h> #include <string.h> int max(int a,int b){ return a>b?a:b; } int main(){ int n,m=0; scanf("%d",&n); int a[n]; int dp[n]; int i,j=0; for(i=0;i<n;i++){ scanf("%d",a+i); } dp[0] =0; for(i=1;i<n;i++){ dp[i]=max(0,a[i]-a[i-1]); j += dp[i]; } printf("%d\n",j); return 0; }
C++ 解法, 执行用时: 13ms, 内存消耗: 792KB, 提交时间: 2022-03-26
#include"iostream" using namespace std; int main() { ios::sync_with_stdio(false); int n,prices[100005],res = 0; cin>>n; for(int i=0;i<n;i++) cin>>prices[i]; for(int i=1;i<n;i++) { if(prices[i]>prices[i-1]) res+=prices[i]-prices[i-1]; } cout<<res; return 0; }
C++ 解法, 执行用时: 13ms, 内存消耗: 1740KB, 提交时间: 2022-03-03
#include<iostream> #include<algorithm> using namespace std; int price[100000],dp[100000] = {0}; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; for(int i = 0;i < n;++i) cin >> price[i]; for(int i = 1;i < n;++i){ int sum = price[i] - price[i - 1]; if(sum > 0) dp[i] = dp[i - 1] + sum; else dp[i] = dp[i - 1]; } cout << dp[n - 1]; }
Go 解法, 执行用时: 13ms, 内存消耗: 6396KB, 提交时间: 2022-03-06
package main import ( "bufio" "os" "strings" "strconv" "fmt" ) func main(){ br:=bufio.NewReader(os.Stdin) str,_:=br.ReadString('\n') str=strings.ReplaceAll(str,"\n","") N,_:=strconv.Atoi(str) arr:=make([]int,N) str,_=br.ReadString('\n') str=strings.ReplaceAll(str,"\n","") strArr:=strings.Split(str," ") for i:=range arr{ arr[i],_=strconv.Atoi(strArr[i]) } fmt.Println(solutionV1(arr)) } func solutionV1(arr []int)int{ ans:=0 for i:=1;i<len(arr);i++{ if arr[i]<=arr[i-1]{ continue } ans+=arr[i]-arr[i-1] } return ans } func min(a,b int)int{ if a<b{ return a } return b } func max(a,b int)int{ if a>b{ return a } return b }