算法学习——2.股票stock

博客围绕股神告知未来n天股票行情,仅允许一次买卖的问题展开。给出了7天的具体股价,分析求解最佳买卖时机,指出最优时间复杂度为O(n),通过从第二天开始遍历,求抛售时间前价格最小值来计算最大利益。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

股神告诉你未来n天股票的行情,却只允许你作一次买卖。求解最佳买卖的时机并分析计算复杂度。

 

第1天:6200

第2天:7000

第3天:4000

第4天:4500

第5天:5300

第6天:3000

第7天:3400

该题最优的时间复杂度是O(n),只遍历一次即可求得结果。

即从从第二天(第一天抛售没有收益)开始,往后遍历,作为抛售时间和抛售价格。同时,求得抛售时间之前的价格最小值,因为抛售时间之前的价格只能作为买入价格。这样两者相减即可求得一个以当前价格卖出去时,所能获得的最大利益。

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

int main() {
	int n;//未来n天
	while( cin>>n && n) {
		long stock[100000] = {0};//数组存储股票行情
		int max = 0 ;//最大化收益
		int buy = 1;//买入时间
		int j = 1;
		int sale=0;//卖出时机
		int min = 0;//记录扫过的数组中的最小值
		for(int i=1; i<=n; i++) {
			cin >> stock[i];//每一天的价格
			//cout << stock[i]<<endl;
		}
		min = stock[1];//最开始取第一个值
		
		//开始做处理,复杂度为n 
		for(int i=2; i<=n; i++) {
			int after = stock[i];//抛出时的价格 
			if(min > stock[i-1]) { //出现了新的最小值
				min = stock[i-1];
				j = i-1; //买入的时间 
			}	
		
			if(max < stock[i]-min) {
				sale = i;
				buy = j; 
				max = stock[i]-min;
			}
		}
		cout << "第"<<buy<<"天买入,第"<<sale<<"天卖出可以赚"<<max<<"元"<<endl;
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值