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

这是数组...


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。这不会为我们赚取最大利润。


我究竟做错了什么?


白衣非少年
浏览 150回答 1
1回答

胡说叔叔

由于数组包含价格变动,因此假设起始价格并从中计算最小/最大值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++) {&nbsp; &nbsp; price += array[i];&nbsp; &nbsp; if (price > max) {&nbsp; &nbsp; &nbsp; &nbsp; max = price;&nbsp; &nbsp; &nbsp; &nbsp; dayOut = i;&nbsp; &nbsp; }&nbsp;&nbsp; &nbsp; if (price < min) {&nbsp; &nbsp; &nbsp; &nbsp; min = price;&nbsp; &nbsp; &nbsp; &nbsp; dayIn = i;&nbsp; &nbsp; }&nbsp;}if (max > min && dayIn < dayOut) {&nbsp;&nbsp; &nbsp; 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 {&nbsp; &nbsp; System.out.println("No trade opportunity found");}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java