题解 | 买卖股票的最好时机(二)(动态规划和贪心算法)
买卖股票的最好时机(二)
https://www.nowcoder.com/practice/fbc5dad3e215457fb82a3ae688eb7281
import java.util.Scanner;
// 贪心算法解决问题
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] nums = new int[n];
for(int i = 0; i < n;i++){
nums[i] = in.nextInt();
}
System.out.println(run(n,nums));
}
public static int run(int n,int[] nums){
if(n == 1||n == 0){
return 0;
}
int maxProfit = 0;
for (int i = 1; i < n; i++) {
// 只要今天的价格比昨天高,就累加利润
if (nums[i] > nums[i - 1]) {
maxProfit += nums[i] - nums[i - 1];
}
}
return maxProfit;
}
}
/** // 动态规划二维数组解决问题
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] nums = new int[n];
for(int i = 0; i < n;i++){
nums[i] = in.nextInt();
}
System.out.println(run(n,nums));
}
public static int run(int n,int[] nums){
if(n == 1||n == 0){
return 0;
}
// 在此定义的dp数组的含义为,0为第i天未持有股票,1为第i天持有股票
int[][] dp = new int[n][2];
dp[0][0] = 0;
dp[0][1] = -nums[0];
for(int i = 1;i < n;i++){
dp[i][0] = Math.max(dp[i - 1][0] , dp[i - 1][1] + nums[i]);// 未持有股票,就相当于抛出,抛出就要获得当天的钱
dp[i][1] = Math.max(dp[i - 1][1] , dp[i - 1][0] - nums[i]);// 持有股票,就相当于买入,抛出就要指出当天的钱
}
return dp[n-1][0];
}
}*/
