用java解决股市难题,实现利润最大化
需要最大利润 如果我只能买一次,卖一次,我可以修改什么以获得最大利润? 也就是说,如果我以5英镑买入,以150英镑卖出,那么它的最大利润是多少 目前我所做的是当价格低于第二天时买入,如果价格高于第二天时卖出 显然,我们必须记住,我们只能在买入之后卖出,这意味着卖出指数不能在买入指数之前卖出 到目前为止,我所做的是:用java解决股市难题,实现利润最大化,java,algorithm,Java,Algorithm,需要最大利润 如果我只能买一次,卖一次,我可以修改什么以获得最大利润? 也就是说,如果我以5英镑买入,以150英镑卖出,那么它的最大利润是多少 目前我所做的是当价格低于第二天时买入,如果价格高于第二天时卖出 显然,我们必须记住,我们只能在买入之后卖出,这意味着卖出指数不能在买入指数之前卖出 到目前为止,我所做的是: package com; public class Stock { public static void main(String[] args) { i
package com;
public class Stock {
public static void main(String[] args) {
int[] prices = {20,10,70,80,5,150,67};
int length = prices.length-2;
int buy=0;
int sell=0;
int buyIndex=-1;
int sellIndex=-1;
int i=0;
for (i =0 ; i<=length ;i++ ){
// buy logic start
if(prices[i]<prices[i+1]){
if(i>buyIndex){
buy= prices[i];
buyIndex=i;
System.out.println("buy"+buy);
System.out.println("buyIndex"+buyIndex);
}
} // buy logic finish
// sell logic start
if(buy!=0 && i>buyIndex ){
System.out.println("inside sell logic");
if(prices[i]>prices[i+1]){
sell = prices[i];
sellIndex = i;
System.out.println("sell"+sell);
System.out.println("sellIndex"+sellIndex);
}
} // sell logic end
} // for loop end
} // main end
}
您可以定义两个辅助数组:最小和最大,其中:
min[0] = array[0]
min[i] = min(min[i-1], array[i] 0 < i < n
直观地说,max[i]是i之后或i处的最大数字
现在,一旦你有了这些数组,max[i]-min[i]就是一只股票获得的最大利润,它最多可以在第一天买入,至少可以在第一天卖出。如果你遍历了所有的is,这基本上就是有效事务的定义。
如果你检查所有的0闻起来像是家庭作业。顺便说一句,我并不认为这是一个与编程相关的问题。@BranislavLazic它不是家庭作业。我只是在试一些拼图。我很清楚,在提出这个问题之前,我们必须自己尝试一下,所以我试着去做。并发布了我到目前为止所做的。谢谢,我会尽力按照你的建议去做。
min[0] = array[0]
min[i] = min(min[i-1], array[i] 0 < i < n
max[0] = array[n-1]
max[i] = max(max[i+1], array[i]) 0 <= i < n-1