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 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更 ...
随机推荐
- zip与unzip
- JDBC记录
13:55 2018/7/22 用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问 ---------常用API--------- |- Driver接口: 表示java驱动程序接 ...
- 转载Java NIO中的Files类的使用
Java NIO中的Files类(java.nio.file.Files)提供了多种操作文件系统中文件的方法. Files.exists() Files.exits()方法用来检查给定的Path在文件 ...
- wzoi(栈模拟)
链接:https://ac.nowcoder.com/acm/contest/332/I 来源:牛客网 题目描述 bleaves 最近在 wzoi 上面做题. wzoi 的题目有两种,一种是 noip ...
- C# Task超时规则
需要知道以下的知识 正规的骚操作:https://stackoverflow.com/questions/4238345/asynchronously-wait-for-taskt-to-comple ...
- PIXI 太空玉兔游戏(6)
想法来源 出于练习看到这篇文章 没有什么难度 效果如下,接下来会用pixijs讲解如何实现 创建应用及舞台 HTML部分只创建标签引入 pixi.min.js 即可: <script ...
- 用Verilog语言设计一个3-8译码器
case语句 if_case语句 源码下载 Github >>
- HTML5之WebSocket && https://zhuanlan.zhihu.com/p/23467317
在认识websocket之前,我们必须了解的是websocket有什么用? 他能解决我们遇到的什么问题? 如果没用,那么我们就么有使用它的必要的. websocket就是建立起全双工协议的,提高了效率 ...
- Java开发环境搭建——IntelliJ Idea开发环境
IntelliJ Idea版本选择由于公司使用JDK7,所以我选择安装Version 2016.1.4(手动安装试验出来的,最新版的2016.1.4启动时提示需要安装JDK8)下载 前面说明有误,其实 ...
- TOJ 1717 WOJ
描述 Alex likes solving problems on WOJ (http://acm.whu.edu.cn/oak). As we all know, a beautiful ballo ...