买卖股票最大收益

2 篇文章 0 订阅
1 篇文章 0 订阅

买卖股票最大收益

假设你有一个数组,其中第 i 个元素是股票在第 i 天的价格。
你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。

解题思路:

由于只有一次买卖机会,只有先买才能卖。我们首先需要设定最初的一个买入值,然后判断之后的卖出值与买入值之差。并且还需要去重新设置买入值

JAVA语言实现:
/**
     * 买卖股票最大收益
     * 假设你有一个数组,其中第 i 个元素是股票在第 i 天的价格。
     * 你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。
     * 解题思路:
     * 由于只有一次买卖机会,只有先买才能卖。我们首先需要设定最初的一个买入值,然后判断之后的卖出值与买入值之差。并且还需要去重新设置买入值
     */
    public int maxProfit (int[] prices) {
        // write code here
        if (prices.length < 2) return 0;
        int max = 0; //最大收益
        int min = prices[0];//给定第一个数据为买入值
        for (int i = 1; i < prices.length; i ++) { //从第二个值开始遍历
            if (prices[i] - min > max) { //当第i个值与买入值之差大于当前的最大收益max时
                max = prices[i] - min; //重新给最大收益max赋值
            }
            if (prices[i] < min){ //判断第i个数是否比设置的买入初值小,小则代表当前的第i个数才是买入的最佳时刻。
                min = prices[i]; //重新赋值最佳买入值
            }
        }
        return max;
    }
Kotlin语言实现
/**
 * 买卖股票最大收益
 * 假设你有一个数组,其中第 i 个元素是股票在第 i 天的价格。
 * 你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。
 * 解题思路:
 * 由于只有一次买卖机会,只有先买才能卖。我们首先需要设定最初的一个买入值,然后判断之后的卖出值与买入值之差。并且还需要去重新设置买入值
 */
private fun maxProfit(prices: IntArray): Int {
    // write code here
    if (prices.size < 2) return 0
    var max = 0   //最大收益
    var min = prices[0] //给定第一个数据为买入值
    for (i in 1 until prices.size) { //从第二个值开始遍历
        if (prices[i] - min > max) {  //当第i个值与买入值之差大于当前的最大收益max时
            max = prices[i] - min      //重新给最大收益max赋值
        }
        if (prices[i] < min) {      //判断第i个数是否比设置的买入初值小,小则代表当前的第i个数才是买入的最佳时刻。
            min = prices[i]         //重新赋值最佳买入值
        }
    }
    println("最大收益为: $max")
    return max
}

调用:

 maxProfit(intArrayOf(5,1,3,10))
 maxProfit(intArrayOf(5,3,1,10))

输出:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值