C语言买卖股票问题
遇到个简单的算法题,没有当场解出来,以后可以写伪代码表达思路。
数组中保存每天的股票价值,求买入卖出的时间和最大利润,比较好的解法如下:
伪代码:
begin
start day = 0; end day = 0; max value = 0;
for day 1 to N;
value = next day's value - today's value;
if value > 0
get max value and day;
else if value < 0
today = next day;
end
实际编码:
#define N 10
int value[N] = { , , , , , , , , , }; void GetMaxValue(int * start, int * end, int * max)
{
int curr_day = , next_day = , tmp_max = ; for (next_day = ; next_day < N && curr_day < N; next_day++)
{
tmp_max = value[next_day] - value[curr_day]; if (tmp_max > *max)//保存比较大的利润和买卖日期
{
*max = tmp_max;
*start = curr_day;
*end = next_day;
}
else if (tmp_max < )//后一天股票值比今天低,可能存在更高利润,作为新起点计算
{
curr_day = next_day;
}
} printf("start_day:%d , end_day:%d ,max_value:%d \n", *start, *end, *max);
}
思路:
自己的第一印象是两个循环,先求出每天买入可得的最大利润,然后再循环一次获取最大的利润,这种是复杂度最高的,里面存在重复计算,当时没有想到优化的办法。后来仔细想了想,用一个循环完全可以解决,思路如下:
从第一天开始,第二天的股票值如果比今天高,那就保存买卖日期和利润,这样继续下去肯定能得到今天买入的最大利润及卖出日期。并且,后面比今天价格高的日期根本不需要计算,因为利润肯定没今天高。
也就是说只需要这一个循环,后面价格高的统统排除掉了。
如果后面某天价格比今天低呢,那就可能存在更大的利润了,所以现在当前计算的日期不需要继续计算,用低价日作为新的起点。因为假如后面有高价日,那今日卖出的利润也没低价日卖出的高。
然后就是重复计算新低价日期能获得的最佳结果,跟旧结果比,取最优值。
C语言买卖股票问题的更多相关文章
- Leecode刷题之旅-C语言/python-121买卖股票的最佳时机
/* * @lc app=leetcode.cn id=121 lang=c * * [121] 买卖股票的最佳时机 * * https://leetcode-cn.com/problems/best ...
- leetcode题解-122买卖股票的最佳时期
题目 leetcode题解-122.买卖股票的最佳时机:https://www.yanbinghu.com/2019/03/14/30893.html 题目详情 给定一个数组,它的第 i 个元素是一支 ...
- leetcode-188 买卖股票4
题目 给定一个数组表示股票每天的价格,最多交易k次,且手上最多只能拥有一支股票(即只能先卖出手上现有的股票再去购买新的股票),求最大的收益. 题目链接:买卖股票4 开始思路不清楚,参考 ...
- lintcode:买卖股票的最佳时机 IV
买卖股票的最佳时机 IV 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格. 设计一个算法来找到最大的利润.你最多可以完成 k 笔交易. 注意事项 你不可以同时参与多笔交易(你必须在再次 ...
- lintcode:买卖股票的最佳时机 III
买卖股票的最佳时机 III 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格.设计一个算法来找到最大的利润.你最多可以完成两笔交易. 样例 给出一个样例数组 [4,4,6,1,1,4,2 ...
- lintcode:买卖股票的最佳时机 II
买卖股票的最佳时机 II 假设有一个数组,它的第i个元素是一个给定的股票在第i天的价格.设计一个算法来找到最大的利润.你可以完成尽可能多的交易(多次买卖股票).然而,你不能同时参与多个交易(你必须在再 ...
- lintcode:买卖股票的最佳时机 I
买卖股票的最佳时机 假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润. 样例 给出一个数组样例 [3,2,3 ...
- LeetCode(123):买卖股票的最佳时机 III
Hard! 题目描述: 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易. 注意: 你不能同时参与多笔交易(你必 ...
- python买卖股票的最佳时机--贪心/蛮力算法简介
开始刷leetcode算法题 今天做的是“买卖股票的最佳时机” 题目要求 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更 ...
随机推荐
- IO模型之三Reactor 和 Proactor IO设计模式
反应器Reactor: 在事件驱动的应用中,应用中的请求总是通过事件(如CONNECTOR.READ.WRITE等)来表示,当多个请求同时到来时,这些请求最终还是会被序列化地处理,在序列化处理这些服务 ...
- 1076 Wifi密码 (15 分)
// 思路是网上以一位大神的,特简单直接采用字符串,判断长度,还有最后一个元素是否T,便可通过ASCll输出数字:#include <iostream> #include <stri ...
- C++_异常8-异常、类和基础
异常.类和继承以三种方式相互关联. 首先,可以像标准C++库所做的那样,从一个异常类派生出另一个. 其次,可以在类定义中嵌套异常类声明来组合异常. 第三,这种嵌套声明本身可以被继承,还可以作为基类. ...
- CF1012B Chemical table(构造)
[Luogu-CF1012B] 还有重题 P5089[eJOI2018]元素周期表 题解原话 : 可以发现这个过程是不改变二分图中的连通分量的个数的 答案就是 连通分量数-1 证明 : 设一行或一列为 ...
- POJ_1733 Parity game 【并查集+离散化】
一.题面 POJ1733 二.分析 该题与之前做过的带权并查集的唯一区别就是数组开不下.所以需要用离散化的思想,只取那些有用的点来解决该问题. 离散化其实就是把这些所有用到的点收集后,去重,再排一下序 ...
- POJ_2407 Relatives 【欧拉函数裸题】
一.题目 Given n, a positive integer, how many positive integers less than n are relatively prime to n? ...
- 江西理工大学南昌校区排名赛 E: 单身狗的种树游戏
题目描述 萌樱花是一只单身狗. 萌樱花今天决定种树,于是他来到了自己家的后院. 萌樱花的后院有n个树坑,所有树坑排列在一行上,每一个树坑都可以种一棵树,相邻树坑间的距离为1,现在所有的树坑都是空着的. ...
- c#工具类之Bitmap缩放帮忙类
using System.Drawing; using System.Drawing.Drawing2D; /// <summary> /// BitmapHelper /// </ ...
- [转] git忽略已经被提交的文件
[From] https://segmentfault.com/q/1010000000430426 正确的做法应该是:git rm --cached logs/xx.log,然后更新 .gitign ...
- for( in ) IE下兼容问题
在JS 中 for in 常用于遍历对象的可枚举属性,包括原型链上的属性.然而for_in在IE < 9下可能会出现问题. for_in要出现问题必须满足两个条件: 1:IE < 9; ...