买卖股票的最佳时机----------一次买卖,多次买卖

 

一次买卖 : 

        假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格。
        如果你最多只允许完成一次交易,设计一个算法来找出最大利润。

两种解题思路 : 

               1. 遍历 求第 i 天买进,第 j 天抛售最大值

源代码 :https://github.com/15936582283/nanmu/blob/master/TheBestBuy/onceOne

        int max = 0;
		for (int i = 0; i < arra.length; i++) {
			for (int j = i + 1; j < arra.length; j++) {
				int t = arra[j] - arra[i];
				if (max < t)
					max = t;
			}
		}

           2 . 计算出股票亏损数组 即 arr[i+1] - arr[i],从第一个不为负数的日子买入,依次相加其后紧挨数组中的值,记录当前最大值,当和为负数时;从接下来不为负数的日子买入,依次相加记录最大值

源代码https://github.com/15936582283/nanmu/blob/master/TheBestBuy/onceTwo

        int mx = 0;     // 判断此时是否亏损
		int max = 0;    // 此时盈利最大
		for (int i = 0; i < arra.length - 1; i++) {
			mx += arra[i+1] - arra[i];
			if(mx < 0) {   //此时亏损,从第二天再买入股票
				mx = 0;
				continue;
			}
			if(max < mx)
				max = mx;
		}

多次买卖 : 

                     给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

                     设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

                     注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

arr[i+1] - arr[i]  > 0   代表盈利,买(即相加) < 0  代表亏损  不买 

源代码 :https://github.com/15936582283/nanmu/blob/master/TheBestBuy/many

        int max = 0;    // 盈利最大
		for (int i = 0; i < arra.length - 1; i++) {
			int t = arra[i+1] - arra[i];
			if(t > 0) max += t;
		}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值