问题:假设你有一个数组,其中第i个元素表示某只股票在第i天的价格。
设计一个算法来寻找最大的利润。你可以完成任意数量的交易(例如,多次购买和出售股票的一股)。但是,你不能同时进行多个交易(即,你必须在再次购买之前卖出之前买的股票)。
思路:其实这个问题可以等价于在给的数组里面找到所有的升序数组,然后对每个升序数组首尾相减,就是每次能获得的最大利润,再把得到所有的值相加起来,得到的就是最大利润了。我们用整型变量a, b分别来表示每次的买入和卖出的价格,用布尔型变量status来表示现在手上是否有股票,从而保证手上最多只有一张股票。
实现过程:
public int maxProfit (int[] prices){
int profit = 0;//利润
int a = 0;
int b = 0;//a,b分别为买入和卖出价格
boolean status = false;//判断现在手上是否有股票
if(prices.length == 0){
return 0;
}
for(int i=0;i<prices.length-1;i++){
if(status == false){//手上无股票时,挑低价买入
if(prices[i] < prices[i+1]){
a = prices[i];
status = true;
}
}else if(status == true){//手上有股票时,挑高价卖出
if(prices[i] > prices[i+1]){
b = prices[i];

该博客讨论了一个算法问题,寻找在给定股票价格数组中能获得的最大利润。允许进行任意次数的交易,但不能同时持有两股。通过找到所有升序子数组并计算它们的差值来确定最大利润。作者分享了实现思路和代码,欢迎交流指正。
最低0.47元/天 解锁文章
986

被折叠的 条评论
为什么被折叠?



