BM80 买卖股票的最好时机(一)

目录

1.题目描述

2.题目分析

3.编写代码

4.总结


这是牛客网上的一道题目

1.题目描述

BM80 买卖股票的最好时机(一)_第1张图片

题目链接:买卖股票的最好时机(一)_牛客题霸_牛客网 (nowcoder.com)

2.题目分析

我们看到这个题目中一个数组表示每一天的股价,那么最大利润怎么算呢,我们用图片来表示

BM80 买卖股票的最好时机(一)_第2张图片

假设这是我们输入的数组

根据题目的意思,我们需要在股价最低的时候买入,在股价最高的时候抛出;但是这有一个问题,我们只能在买入当天以后的股价中找利润最大的,如果没有最大的,那就返回0;我们推理一下

  • 第一天:最小值8 利润:8-8=0

  • 第二天:最小值8 利润:9-8=1

  • 第三天:最小值2 利润:2-2=0

  • 第四天:最小值2 利润:4-2=2

  • 第五天:最小值2 利润:10-2=8

  • 第六天:最小值1 利润:1-1=0

  • ......

  • 依次递推即可知道:最大利润值即为8

3.编写代码

根据这个逻辑,写代码的时候我们需要初始化最低股价min,最大效益maxProfit,当前股价price 

  • 当前股价我们需要假设每一天的情况,所以我们用for循环遍历数组实现
  • 最低股价我们假设数组的第一个元素是最低股价,然后与当前股价比较得出最低股价
  • 每一天的最大利润是当前股价减去最低股价
  • 比较每天的最大利润,得出所有最大利润中最大利润返回
  • 没有利润则返回0

我们编写出下面这段代码

int maxProfit(int* prices, int pricesLen ) {
    // write code here
    int min=*prices;
    int maxProfit=0;//初始化最大利润
    int price=0;//初始化当前股价
    for(int k=0;k

BM80 买卖股票的最好时机(一)_第3张图片

4.总结

作为程序员,拿到题目后一定不会是立刻打开编译器写代码的,我们需要先分析题目,梳理解决问题的逻辑

条理清晰,才能写出高效的代码

一起加油吧!小杜陪各位一起成长

你可能感兴趣的:(#,牛客网刷题,leetcode,动态规划,算法)