算法-贪心算法-简单-买卖股票的最佳时机

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

记录一下算法题的学习4

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

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

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

示例 1:

输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
     注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

示例 2:

输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 没有交易完成, 所以最大利润为 0

这种题我看了解析:

首先Interger.MAX_VALUE是什么,我就不清楚,我查了一下:

Integer.MAX_VALUE表示int数据类型的最大取值数:2 147 483 647
Integer.MIN_VALUE表示int数据类型的最小取值数:-2 147 483 648

然后思考分析:

其实就是画一个折线图,我直接截图:

我们在遍历这个prices数组时,先要找到一个最小买入价格min_price进行记录,然后在没有找到下一个更小的买入价格时,我们计算接下来每一天的利润,记录其中最大利润。如果能找到下一个最小买入价格min_price,我们同样计算其中未找到下一个更小买入价格时的利润最大值,直到遍历完prices数组,max_profit就是历史最大差值!即最大利润,同时满足不能在在买入前卖出股票

通过代码(官网答案) 展示:

class Solution {
    public int maxProfit(int[] prices) {
     int min_price=Integer.MAX_VALUE;
     int max_profit=0;
     for (int i=0;i<prices.length;i++){
         if(prices[i]<min_price){
             min_price=prices[i];
         }else if(prices[i]-min_price>max){
             max_profit =prices[i]-min_price;
         }
     }
     return max_profit;
  } 
}

我自己写的暴力遍历(超时) 代码展示,还有一个超出内存限制了

class Solution {
    public int maxProfit(int[] prices) {
    //定义一个初始最大值
    int max=0;
    //双重循环遍历找最大值,即最大利润
     for(int i=0;i<prices.length;i++){
        for(int j = i+1;j<prices.length;j++){
            max = Math.max(max,prices[j]-prices[i]);
            
        }
     }
     return max;
    }
}

算法——股票买卖问题 含有冷冻期 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 class Solution { public int maxProfit(int[] prices) { int res = 0; int n = pric 阅读详情

相关推荐

买卖股票最佳时机系列算法总结

思路:双指针i和j,当i所对应的股票的值小于j所对应的股票的值时记下price[j]-price[i]等于盈利的钱,然后j++,再次比较二者,盈利的钱需要和上次盈利的钱比较保证记录下来的盈利是最大的。如果i所对应的股票的值大于j所对应的股票的值,则说明出现亏损,需要将i变成j,再j++。第一天买和卖还有第二天的买需要特别处理,因为第二天的买需要由前面天的卖剩下的利润决定,但是目前才第二天所以没有前两天的卖,因此默认剩下的利润就是0。思路:贪心算法,只要买入的价格比卖出的底即有收益就卖,卖完就买。

wwwwz9的博客 956

❤️独特的算法❤️:一文解决买卖股票问题

投资股票是一种广泛使用的财务手段,但是如何最大化收益是一个非常困难的问题。在这篇文章中,我们将介绍一种高效的算法来解决这个问题:买卖股票问题算法

weixin_62633072的博客 398

LeetCode 121. 买卖股票最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。 示例 1: 输入:[7,1,5,3,6,4] 输出:5 解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1

tomjobs的博客 1740

算法-贪心-1055. 股票买卖 II

样例1:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3。样例2:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。给定一个长度为 N的数组,数组中的第 i个数字表示一个给定股票在第 i 天的价格。

m0_73939047的博客 396

Leetcode初学——买卖股票最佳时机|| 及 贪心算法简单介绍

题目: 分析: 我的计算方法就是当天买,第二天卖,如果第二天卖的价格是负数,则当天不买,一直到最后一天 即 如果 prices[i+1]-prices[i]>0 则 res+= prices[i+1]-prices[i] 如果 prices[i+1]-prices[i]<=0 则 res+= 0 i为天数 i+1<=最大天数 我们从几种可能性来分析这道题 持续上涨型 像这样的类型 我们...

Amo 237

贪心算法】Leetcode 121. 买卖股票最佳时机简单

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。时间复杂度:遍历一次数组,时间复杂度为O(n),其中n为数组prices的长度。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。空间复杂度:仅使用了常数级的额外空间,空间复杂度为O(1)。

FLGB 414

力扣网编程121题:买卖股票最佳时机贪心算法简单

力扣网编程189题:买卖股票最佳时机

wojiaxiaohuang2014的博客 387

122. 买卖股票最佳时机 II-简单-动态规划、贪心算法

122. 买卖股票最佳时机 II-简单-动态规划、贪心算法 给定一个数组,它的第i个元素是一支给定股票第i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: [7,1,5,3,6,4] 输出: 7 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4

qq_38454093的博客 191

2.<tag-贪心算法简单应用>122. 买卖股票最佳时机 II 1.5

2.<tag-贪心算法简单应用>122. 买卖股票最佳时机 II

菜菜的大数据开发の路 214

贪心算法

「力扣」第 12 题:整数转罗马数字,贪心思想更多来源于直觉; 「力扣」第 452 题:用最少数量的箭引爆气球,画图发现贪心策略; 「力扣」第 122 题:买卖股票最佳时机 II,需要简单推导了; 「力扣」第 55 题: 跳跃游戏,画图思考; 「力扣」第 56 题: 求重叠区间,画图思考; 「力扣」第 435 题: 无重叠区间,画图思考; 「力扣」第 455 题:分发饼干; 「力扣」第 343 题: 整数拆分,需要简单推导。 「力扣」第 300 题:最长上升子序列,本质上还是动态规划,只不过在推导的过程中

qq_24503189的博客 331

LeetCode :初级算法_[数组]:买卖股票最佳时机 II (C语言实现)

LeetCode :初级算法_[数组]:买卖股票最佳时机 II 题目地址: https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/array/22/ 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多...

Linux 451

Leetcode DAY 49~50:买卖股票最佳时机 1 2 3 4

买卖股票最佳时机 1 2 3 4思路及代码

qq_44189622的博客 387

买卖股票最佳时机

leetcode 122. 买卖股票最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: [7,1,5,3,6,4] 输出: 7 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。随后,在第 4 天(股票价格

Lc_summer的博客 231

LeetCode算法--买卖股票最佳时机 II

LeetCode算法题–买卖股票最佳时机 II 题目来源:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/ 题目要求 题目思路: 贪心算法可破之:只要有利润,就出售。 class Solution { public int maxProfit(int[] prices) { ...

wuyusen123456的博客 178

通俗易懂:贪心算法(三):习题练习 (力扣605种花问题、122买卖股票最佳时机)

看完本文,可以顺便解决leetcode以下两个题目: 605.种花问题????(简单) 122.买卖股票最佳时机Ⅱ????(简单) 605.种花问题(简单) 题目描述 假设有一个很长的花坛????,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?????能则返回 true

比特的一天 602

【Leetcode 每日一题】122. 买卖股票最佳时机 II(贪心、水题)

Leetcode 每日一题 题目链接: 122. 买卖股票最佳时机 II 难度: 简单 解题思路: 贪心求解,若相邻一天的价格之差大于0。则前一天买入,后一天卖出。 题解: class Solution: def maxProfit(self, prices: List[int]) -> int: res = 0 for i in range(1, len(prices)): if prices[i] - prices[i - 1] &

YancyKahn 339

牛客 剑指offer:买卖股票最佳时机

题目:买卖股票最佳时机 思路:贪心。 维护一个最小价格,循环的过程不断更新该值,这样可以得到当前位置卖的最大价格。 代码: import java.util.*; public class Solution { /** * * @param prices int整型一维数组 * @return int整型 */ public int maxProfit (int[] prices) { // write code here

zhang_han666的博客 130

【代码随想录算法训练营第三十二天|122.买卖股票最佳时机II、55. 跳跃游戏、45.跳跃游戏II】

从前往后正推,每次走到当前的最大范围了就step+1,范围变成下一个最大范围。只需要遍历到倒数第二个元素,最后一次走到倒数第二个元素就不用判断是否走到了当前的最大范围了。我是从倒数第二位开始看,如果下标+可以跳跃的长度大于等于最后一位下标,则把它的下标看作新的目标,往前依此类推,最后看最小符合要求的下标是否为0。想了一个用回溯的方法做的,但是超时间限制了,但如果是要所有可能路径+step的话可以这样做。计算相邻两天的利润,如果是正的就加到结果里,负的就扔掉。还是从后往前倒推来做的一种方法。

weixin_46281930的博客 293
上一篇: 算法-二分查找-简单-搜索插入位置
下一篇: 算法-链表-简单-相交、反转、回文、环形、合并
木禾呀
博客等级 码龄4年 183粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值