遇到个简单的算法题,没有当场解出来,以后可以写伪代码表达思路。

  数组中保存每天的股票价值,求买入卖出的时间和最大利润,比较好的解法如下:

伪代码:

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语言买卖股票问题的更多相关文章

  1. Leecode刷题之旅-C语言/python-121买卖股票的最佳时机

    /* * @lc app=leetcode.cn id=121 lang=c * * [121] 买卖股票的最佳时机 * * https://leetcode-cn.com/problems/best ...

  2. leetcode题解-122买卖股票的最佳时期

    题目 leetcode题解-122.买卖股票的最佳时机:https://www.yanbinghu.com/2019/03/14/30893.html 题目详情 给定一个数组,它的第 i 个元素是一支 ...

  3. leetcode-188 买卖股票4

    题目 给定一个数组表示股票每天的价格,最多交易k次,且手上最多只能拥有一支股票(即只能先卖出手上现有的股票再去购买新的股票),求最大的收益.     题目链接:买卖股票4     开始思路不清楚,参考 ...

  4. lintcode:买卖股票的最佳时机 IV

    买卖股票的最佳时机 IV 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格. 设计一个算法来找到最大的利润.你最多可以完成 k 笔交易. 注意事项 你不可以同时参与多笔交易(你必须在再次 ...

  5. lintcode:买卖股票的最佳时机 III

    买卖股票的最佳时机 III 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格.设计一个算法来找到最大的利润.你最多可以完成两笔交易. 样例 给出一个样例数组 [4,4,6,1,1,4,2 ...

  6. lintcode:买卖股票的最佳时机 II

    买卖股票的最佳时机 II 假设有一个数组,它的第i个元素是一个给定的股票在第i天的价格.设计一个算法来找到最大的利润.你可以完成尽可能多的交易(多次买卖股票).然而,你不能同时参与多个交易(你必须在再 ...

  7. lintcode:买卖股票的最佳时机 I

    买卖股票的最佳时机 假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润. 样例 给出一个数组样例 [3,2,3 ...

  8. LeetCode(123):买卖股票的最佳时机 III

    Hard! 题目描述: 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易. 注意: 你不能同时参与多笔交易(你必 ...

  9. python买卖股票的最佳时机--贪心/蛮力算法简介

    开始刷leetcode算法题 今天做的是“买卖股票的最佳时机” 题目要求 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更 ...

随机推荐

  1. jquery实现淘宝动态图展示商品

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. BCH code

    简单介绍 若循环码的生成多项式具有如下形式\(g(x)=LCM[m_{1}(x),m_{3}(x)..m_{2t-1}(x)]\) 其中LCM表示最小公倍式,t为纠错个数,\(m_{i}(x)\)为素 ...

  3. tornado 06 数据库—ORM—SQLAlchemy——基本内容及操作

    tornado 06 数据库—ORM—SQLAlchemy——基本内容及操作 一. ORM #在服务器后台,数据是要储存在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,该怎么办?是不 ...

  4. c# post get

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. JAVA 大数 A+B问题

    A + B Problem II I have a very simple problem for you. Given two integers A and B, your job is to ca ...

  6. tensorflow-如何防止过拟合

    回归:过拟合情况 / 分类过拟合 防止过拟合的方法有三种: 1 增加数据集 2 添加正则项 3 Dropout,意思就是训练的时候隐层神经元每次随机抽取部分参与训练.部分不参与 最后对之前普通神经网络 ...

  7. c# 多数值区间判断是否有重叠

    /// <summary> /// 金额区间判断帮助类 /// </summary> public static class DecimalRangeHelper { /// ...

  8. 《The Python Standard Library》——http模块阅读笔记1

    官方文档:https://docs.python.org/3.5/library/http.html 偷个懒,截图如下: 即,http客户端编程一般用urllib.request库(主要用于“在这复杂 ...

  9. Shell脚本检测程序,如果挂了就重启程序

    脚本如下: #!/bin/sh #要检查的进程名 PROGRESS_NAME="heihu_server" #----------------------------------- ...

  10. SQL中CASE 的用法 转载

    sql语言中有没有类似C语言中的switch case的语句?? 没有,用case   when   来代替就行了.              例如,下面的语句显示中文年月 select getdat ...