为了账号安全,请及时绑定邮箱和手机立即绑定

关于 Java 中的最大值/利润子数组问题的问题

关于 Java 中的最大值/利润子数组问题的问题

白衣非少年 2022-12-21 14:45:20
这是数组...int[] array = new int[]{4,-1,-2,3,5,-7,1,0,0,-2,4};我们需要看看我们是否可以从前一天开始购买股票。因此,我们应该以 -1 的价格买入并以 5 的价格卖出。这将带来 6 的利润。    int max = Integer.MIN_VALUE;    int maxDiff = Integer.MIN_VALUE;    int diff = 0;    int bottom = array[0];    for (int i = 1; i < array.length; i++) {        diff += array[i] - array[i - 1];        System.out.println(diff);        if (diff > maxDiff) {            maxDiff = diff;            max = array[i];        }        if (array[i] < bottom) {            bottom = array[i];            diff = 0;        }    }    int maxx = max - maxDiff;    System.out.println("Buy at " + maxx + " Sell at " + max);这就是说我应该在 -7 买入并在 4 卖出。这是不正确的。如果我们在 -7 买入,价格将上涨 1,然后保持不变,保持不变,下跌 2,然后上涨 4。这不会为我们赚取最大利润。我究竟做错了什么?
查看完整描述

1 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

由于数组包含价格变动,因此假设起始价格并从中计算最小/最大值


int max = Integer.MIN_VALUE;

int min = Integer.MAX_VALUE;

int price = 100;

int dayIn = 0;

int dayOut = 0;


for (int i = 0; i < array.length; i++) {

    price += array[i];

    if (price > max) {

        max = price;

        dayOut = i;

    } 

    if (price < min) {

        min = price;

        dayIn = i;

    } 

}

if (max > min && dayIn < dayOut) { 

    System.out.printf("Buy for %d at day %d and sell on day %d for %d. Profit: %d\n", min, (dayIn + 1), (dayOut+1), max, max - min);

} else {

    System.out.println("No trade opportunity found");

}


查看完整回答
反对 回复 2022-12-21
  • 1 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号