数组中差值的最大值(寻找一个数组中左侧最大值与右侧最小值的差值)

今天跟大伙分享下关于数组中差值的最大值(寻找一个数组中左侧最大值与右侧最小值的差值)的计算思路的算法题,解决方案有许多,这里简单进行抛砖引玉。

题目一:

数组中差值的最大值(寻找一个数组中左侧最大值与右侧最小值的差值)
给你一段时间的代码量数组,求出代码量减少值即差值的最大值,如果代码量是一直递增,则返回0
例子1
records=[370,400,420,390,350,430,400]
输出:70
解释:
左侧420和右侧350之间的差值最大,则输出70
例子2 records=[300,400,420,490,550,551,600]
输出:0

两种思路解决,第一种思路是暴力双重for循环,第二种思路双指针滑动窗口解决。
第一种思路是暴力双重for循环:

 public static int getMaxSubNum(int[] records) {
        int maxSubNum = 0;
        for (int i = 0; i < records.length - 1; i++) {
            for (int j = i + 1; j < records.length; j++) {
                if (records[i] > records[j]) {
                    maxSubNum = Math.max(maxSubNum, records[i] - records[j]);
                }
            }
        }
        return maxSubNum;
    }

第二种思路双指针滑动窗口解决:

public static int getMaxSubNumIndex(int[] records) {
        int maxSubNum = 0;
        int left = 0;
        int right = 1;
        while (right < records.length) {
            if (records[left] < records[right]) {
                left++;
            } else {
                maxSubNum = Math.max(maxSubNum, records[left] - records[right]);
                right++;
            }
        }
        return maxSubNum;
    }

我们可以举一反三,利用这2个思路解决下力扣算法:股票的最大利润问题

题目二:

假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?
示例 1:
输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 => 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。
示例 2:
输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

第一种思路是暴力双重for循环:

int maxProfit = 0;
        for (int i = 0; i < prices.length; i++) {
            for (int j = i + 1; j < prices.length; j++) {
                if (prices[i] < prices[j]) {
                    maxProfit = Math.max(maxProfit, prices[j] - prices[i]);
                }
            }
        }
        return maxProfit;

第二种思路双指针滑动窗口解决:

public static int maxProfitIndex(int[] prices) {
        int maxProfit = 0;
        int left = 0;
        int right = 1;
        while (right < prices.length) {
            if (prices[left] > prices[right]) {
                left++;
            } else {
                maxProfit = Math.max(maxProfit, prices[right] - prices[left]);
                right++;
            }

        }
        return maxProfit;
    }

给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。
在每一天,你可能会决定购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以购买它,然后在 同一天 出售。 返回 你能获得的最大利润 。
示例 1:
输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出,最大利润 = 5-1 = 4 。
在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-3 = 3 。
最大利润4+3=7。

代码如下:

public static int maxProfit3(int[] prices) {
        int maxProfit = 0;
        for (int i = 0; i < prices.length - 1; i++) {
            if (prices[i] < prices[i + 1]) {
                maxProfit += prices[i + 1] - prices[i];
            }
        }
        return maxProfit;
    }
  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值