如何买卖股票以获得最大收益 java算法

该博客探讨了如何在给定的股票价格序列中找到最大收益的买卖策略。首先介绍了使用双重for循环的直观但效率低下的方法,然后提出通过一次循环查找最低点和最高点来提高效率,虽然实际性能接近O(n^2)。最后,讨论了线性时间复杂度O(n)的解决方案,以更高效地计算股票的最大潜在利润。
摘要由CSDN通过智能技术生成

已知一段时间内股价有涨跌,例如 {3,6,1,4,7,3,8,8,3,5}.求最大获利是多少。不能买空卖空。

例如,上例应该是第3天买,第7天卖获利最大,获利为7。

其实最简单直接的思路还是双重for循环解法,只是效率较低,为O(n的平方):

import java.util.Arrays;

public class Main{

    public static void main(String[] args){

        int[] a = {3,6,1,4,7,3,8,8,3,5};
        int d = 0;
    
        for(int i=0; i<a.length; i++){
            for(int j=i; j<a.length; j++){
                
                if(d < a[j] - a[i]){
                    d = a[j] - a[i];
                }
            }
        }
        System.out.println(d);

    }
}

另一种解法:

找出某天之前的最低点和之后的最高点,并计算最大差值。通过一次循环找到股票的最低点和最高点,从而得到最大获利。看上去是一次循环,但由于找最小值和最大值的花费,性能和解法一差不多。

import java.util.Arrays;

public class Main {
 
	public static void main(String[] args) {
 
		int[] a={3,9,1,4,7,3,8,8,3,5};		
		int d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值