标签:思路 cep main 完成 简单的 pre i++ 初始 多次
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例 1:
输入: [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。
这道题用深搜可以解决
先说思路:
设初始数组为 price[], 长度为n
public class GuPiao122 {
static int max = Integer.MIN_VALUE;
public static void main(String[] args){
int[] prices = {1,2,3,4,5};
int sum = 0;
calculate(prices, 0, sum);
System.out.print(max);
}
public static void calculate(int[] prices, int s, int sum){
//边界处理好,如果到末尾了,因为没有下一个数给他判断得到profit,所以就return 结束掉
if(s == prices.length-1){
return;
}
//双层循环
for(int i = s; i < prices.length; i++){
for(int j = s+1; j < prices.length; j++){
//如果后一个数比前一个数大,才进行搜索下
if(prices[j] > prices[i]){
int profit = prices[j] - prices[i];
int newSum = profit + sum;
if(newSum > max){
max = newSum;
}
for(int h = j+1; h<prices.length; h++){
calculate(prices, h, newSum);
}
}
//如果后一个数没前一个数大,就再找下一个 ( 这里是通过 j+1操作的)
}
}
}
}
标签:思路 cep main 完成 简单的 pre i++ 初始 多次
原文地址:https://www.cnblogs.com/disandafeier/p/9875303.html