首页 > 其他分享 >买卖股票的最佳时机——差值的最值的遍历寻找

买卖股票的最佳时机——差值的最值的遍历寻找

时间:2024-03-01 16:36:15浏览次数:23  
标签:遍历 int 元素 maxProfit 最佳时机 prices minPrice 最值 利润

题目描述:

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

(1)只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算所能获取的最大利润。

返回可以从这笔交易中获取的最大利润。如果不能获取任何利润,返回 0

(2)在每一天,可以决定是否购买和/或出售股票。在任何时候最多只能持有一股股票。也可以先购买,然后在同一天出售。返回能获得的最大利润。

解题思想:
(1)摒弃一开始所想到的在给定的数组中寻找最小元素和最大元素(保证最小元素的下标值在最大元素之前),原因是在特殊情况下,例如最小元素位于最后一位,返回值会是0,但是在数组中存在第i-1个元素与第i个元素的差值为正数(这种情况代表有利润)

因而正确的想法应该是记录最小值,然后同时记录差值最大值而不是最大值。

int maxProfit(int* prices, int pricesSize) {
    int minPrice,maxProfit;
    minPrice=prices[0];
    maxProfit=0;
    for(int i=1;i<pricesSize;i++){
        minPrice=minPrice>prices[i]?prices[i]:minPrice;
        maxProfit=maxProfit>prices[i]-minPrice?maxProfit:prices[i]-minPrice;
    }
    return maxProfit;
}

 (2)在理解了单股单出的情况下,单股多出也就好理解了,只要利润为正值就可以抛售,注意计算利润的最大值,需要累加。

int maxProfit(int* prices, int pricesSize) {
    int profit=0;
    for(int i=1;i<pricesSize;i++){
        profit+=prices[i]-prices[i-1]>0?prices[i]-prices[i-1]:0;
    }
    return profit;
}

 

标签:遍历,int,元素,maxProfit,最佳时机,prices,minPrice,最值,利润
From: https://www.cnblogs.com/WangLiy/p/18047383

相关文章

  • 代码随想录算法训练营第三十二天 | 45.跳跃游戏II ,55. 跳跃游戏,122.买卖股票的最佳时
     122.买卖股票的最佳时机II 已解答中等 相关标签相关企业 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购......
  • 94. 二叉树的中序遍历c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*//***Note:Thereturnedarraymustbemalloced,assumecallercallsfree().*/voidinorder(structTre......
  • 145. 二叉树的后序遍历c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*//***Note:Thereturnedarraymustbemalloced,assumecallercallsfree().*/voidpostorder(structT......
  • 144. 二叉树的前序遍历c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*//***Note:Thereturnedarraymustbemalloced,assumecallercallsfree().*/voidpreorder(structTr......
  • 面试官上来就让手撕HashMap的7种遍历方式,当场愣住,最后只写出了3种
    写在开头今天有个小伙伴私信诉苦,说面试官上来就让他手撕HashMap的7种遍历方式,最终只写出3种常用的,怀疑面试官是在故意***难。这个问题大家怎么看?反正我个人感觉这肯定不是***难,“手撕遍历方式”算是一个比较简单的考验方式了,而且集合的遍历又是日常开发的必备!至于要一下写出7......
  • (32/60)买卖股票的最佳时机Ⅱ、跳跃游戏、跳跃游戏Ⅱ
    想不到,根本想不到买卖股票的最佳时机Ⅱleetcode:122.买卖股票的最佳时机II贪心法思路任何一天的累计利润都可以拆成之前每天相比前一天的利润之和,因此最大利润就是收集了每天的正利润。复杂度分析时间复杂度:O(N)。空间复杂度:O(1)。注意点略代码实现classSolution......
  • leedcode 二叉树的前序遍历
    递归法:classSolution:def__init__(self):#初始化一个实例变量res用于存储前序遍历结果self.res=[]defpreorderTraversal(self,root:Optional[TreeNode])->List[int]:#如果根节点存在ifroot:#检查根......
  • 神中神之【Map】遍历操作
    前言首先插入几个值方便操作'''Map<Integer,String>map=newHashMap<>();map.put(1,"A");map.put(2,"B");map.put(3,"C");//System.out.println(map);->{1=A,2=B,3=C}调用tostring'''//......
  • JAVA基础:数组遍历
    遍历:一个一个访问 packagecom.itheima.arry;publicclassArryDemo2{publicstaticvoidmain(String[]args){//掌握数组遍历int[]ages=newint[]{12,24,36};//System.out.println(ages[0]);//System.out.println(ages[1]);......
  • CTFHUB-web-信息泄露-目录遍历
    开启靶场http://challenge-a4aa9ff53d890618.sandbox.ctfhub.com:10800/查看此处源代码,没有发现有用信息点击开始寻找flag挨个点几个目录寻找flag在目录1/2下发现了flag提交一手,直接成功。可以参考此链接(纯小白,无教程思路有限)https://www.cnblogs.com/quail2333/p/12......