leetcode刷题121 买卖股票的最佳时机 Best Time to Buy and Sell Stock(简单) Python Java

选课系统进不去?我用 Python 做了个“捡漏挂机”脚本,全自动监控空余名额 频率控制:脚本请求频率不要太高(建议间隔 3-5 秒以上),否则可能被教务系统封 IP,甚至会被教务处请喝茶。仅供学习:本文旨在通过选课场景教学requests和网络抓包原理,请勿用于非法用途或破坏公平性。刷新页面 -> 等待加载 -> 用眼睛看人数 -> 没满?-> 点击选课 -> 确认这个流程最大的瓶颈在于**“等待加载”和“人的反应时间”**。网页加载需要渲染 HTML、CSS、图片,而 Python 脚本只需要请求一个微小的 JSON 数据接口,速度是浏览器的10 倍以上。fill:#333; 阅读详情

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

注意你不能在买入股票前卖出股票。

示例 1:

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


示例 2:

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

扫描价格数组,维护一个最小值,当前元素-最小值>最大利润时,更新最大利润即可。

class Solution(object):
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        if not prices: # 列表为空是False
            return 0
        buy=prices[0] # 初始化第一个元素为最小元素
        out=0
        for i in range(1,len(prices)):
            if prices[i]<buy:
                buy=prices[i]
            else:
                out=max(out,prices[i]-buy)  
        return out

if __name__ == '__main__':
    a = Solution()
    result = a.maxProfit([7,1,5,3,6,4])
    print(result)

结果为5,与题目一致

 

以下是Java版本:

题目大意:给一个数组prices[],prices[i]代表股票在第i天的售价,求出只做一次交易(一次买入和卖出)能得到的最大收益。 

解题思路:只需要找出最大的差值即可,即 max(prices[j] – prices[i]) ,i < j。一次遍历即可,在遍历的时间用遍历low记录 prices[o….i] 中的最小值,就是当前为止的最低售价,时间复杂度为 O(n)。

public class Solution {
    public int maxProfit(int[] prices) {

        if (prices == null || prices.length < 1) {
            return 0;
        }

        int min = prices[0];
        int profit = 0;

        // 第i天的价格可以看作是买入价也可以看作是卖出价
        for (int i = 1; i < prices.length; i++) {
            // 找到更低的买入价
            if (min > prices[i]) {
                // 更新买入价
                min = prices[i];
            } 
            // 当天的价格不低于买入价
            else {
                // 如果当天买出的价格比之前卖出的价格高
                if (profit < prices[i] - min) {
                    // 更新卖出价
                    profit = prices[i] - min;
                } 
            }
        }
        return profit;
    }
}

这道题求进行一次交易能得到的最大利润。如果用brute force的解法就是对每组交易都看一下利润,取其中最大的,总用有n*(n-1)/2个可能交易,所以复杂度是O(n^2)。
很容易感觉出来这是动态规划的题目,其实跟Maximum Subarray非常类似,用“局部最优和全局最优解法”。思路是维护两个变量,一个是到目前为止最好的交易,另一个是在当前一天卖出的最佳交易(也就是局部最优)。递推式是local[i+1]=max(local[i]+prices[i+1]-price[i],0), global[i+1]=max(local[i+1],global[i])。这样一次扫描就可以得到结果,时间复杂度是O(n)。而空间只需要两个变量,即O(1)。代码如下:

1.	public int maxProfit(int[] prices) {  
2.	    if(prices==null || prices.length==0)  
3.	        return 0;  
4.	    int local = 0;  
5.	    int global = 0;  
6.	    for(int i=0;i<prices.length-1;i++)  
7.	    {  
8.	        local = Math.max(local+prices[i+1]-prices[i],0);  
9.	        global = Math.max(local, global);  
10.	    }  
11.	    return global;  
12.	}  

 

RK3588 hdmiout调试(一) 阅读详情

相关推荐

arduino uno spi驱动12864

arduino uno spi驱动12864

yvee的博客 2060

leetcode股票最佳买卖时机六道题

https://leetcode-cn.com/problemset/all/?search=%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8

qq_40239192的博客 505

generate for与always内for:Verilog循环的静态生成与动态执行之辨

本文深入解析Verilog中generate for与always内部for循环的核心差异。generate for使用genvar变量在编译时静态生成硬件结构,适用于模块实例化;always内部for使用整型变量在运行时动态执行,综合为并行逻辑。理解这两种循环的适用场景和综合结果对提升数字电路设计质量至关重要。

yog99的博客 1086

【LeetCode】121. Best Time to Buy and Sell Stock 解题报告(Java & Python & C++)

【LeetCode】121. Best Time to Buy and Sell Stock 解题报告(Java &amp;amp;amp;amp;amp;amp;amp; Python) [LeetCode] https://leetcode.com/problems/best-time-to-buy-and-sell-stock/ Total Accepted: 98941 Total Submissions: 274449 Diff...

负雪明烛 3026

手把手教你用高频注入法辨识永磁同步电机电感参数(附MATLAB仿真)

本文详细介绍了高频注入法在永磁同步电机电感参数辨识中的工程实践与MATLAB仿真指南。通过高频信号注入法,无需拆解电机即可在线精确测量Ld和Lq参数,适用于电动汽车驱动和工业伺服等高精度控制场景。文章包含信号设计、硬件实现、解调算法及完整MATLAB仿真模型构建,帮助工程师快速掌握这一关键技术。

orange的博客 292

在RStudio中使用GitHub Copilot:代码自动生成,从此告别手敲!

可以通过自定义提示词来引导Copilot生成符合自己需求的代码。再看一个做统计分析的。

Codewar的博客 330

LeetCode 121. Best Time to Buy and Sell Stock--Java,Python,C++解法

LeetCode 121. Best Time to Buy and Sell Stock LeetCode题解专栏:LeetCode题解 我做的所有的LeetCode的题目都放在这个专栏里,大部分题目Java和Python的解法都有。 欢迎大家关注我的专栏。 题目地址:Best Time to Buy and Sell Stock - LeetCode ...

个人博客 626

手把手教你学Simulink--电机控制架构与算法实现​场景示例:基于Simulink的电机速度环PID调节仿真

本文带你完成了电机速度环PID参数的科学整定,实现了:✅ 理解了速度环的级联系统特性与关键参数影响工程整定法(理论初值)系统辨识法(参数未知时)✅ PID Tuner自动调参(推荐!自动调参兼具快速性与鲁棒性✅ 学会了前馈补偿抗饱和等工程实用技巧。

MHD0815的博客 653

leetcode 121. Best Time to Buy and Sell Stock

文章目录C++JavaPythonGo Say you have an array for which the ith element is the price of a given stock on day i. If you were only permitted to complete at most one transaction (i.e., buy one and sell one share of the stock), design an algorithm to find the maxi

wineandchord 210

从苏宁电器到卡巴斯基(第二部)第14篇:我在卡巴的日子 XIV

目录 WannaCry 我的感慨 邻里矛盾 WannaCry 如果大家对于科技互联网圈子的新闻比较感兴趣的话,相信会对2017年5月的“WannaCry勒索病毒”事件记忆犹新,因为这个病毒在当时的全世界范围内掀起了极大的波澜,众多的企事业单位深受其害,造成的金钱和数据损失难以估量,从某种意义上来说,它甚至引领了勒索病毒新一轮的爆发浪潮。而通过这样的一次爆发,也让我对于卡巴斯基的技术实力有了更进一步的了解。 我记得很清楚,爆发的那天是周六,没记错的话Seth那天有事,就请假没来,只有我自己在公司值

Gleam的专栏 4919

OpenClaw 运行时错误文档:Embedded Run Agent End with Stream Error(嵌入式运行代理结束流式错误)

OpenClaw运行时错误文档:EmbeddedRunAgentEndwithStreamError(OC-ERR-009) 该错误表示LLM提供商在流式传输过程中发生服务器端异常(HTTP 500),属于可恢复的中等严重性错误。典型表现为日志中出现包含"stream_error"和500状态码的错误信息。系统会自动进行错误分类(50%为服务过载,25%网络问题等),并通过内置机制尝试解决:包括模型切换、API密钥轮换和自动重试策略。用户可采取重试请求、切换模型或简化请求内容等操作,管理

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 550

[leetcode]121.Best Time to Buy and Sell Stock|差分数组&Dynamic Programming

题目 题目分析: 这道题也是求最值,所以用了动态规划。直接用prices求动态规划数组好像不太行,所以我就加了一个差分数组diff,然后按照求最大subarray和的方法,求得结果。 代码 class Solution { public int maxProfit(int[] prices) { int n = prices.length; if(n ==...

RanranLyu的博客 376

SCI论文发表很容易【5】:比较容易中的期刊

整理了一些经管方面比较容易中稿的期刊,可供大家参考

qq_25018077的博客 1678

[LeetCode] 121. Best Time to Buy and Sell Stock 买卖股票的最佳时间

Say you have an array for which theithelement is the price of a given stock on dayi. If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), d...

weixin_30480583的博客 98

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

LeetCode121 Best Time to Buy and Sell Stock

详细见:leetcode.com/problems/best-time-to-buy-and-sell-stock Java Solution: github package leetcode; /* * Say you have an array for which the ith element is the price of * a given stock on

zxwtry的博客 511

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

121. Best Time to Buy and Sell Stock

题目: Say you have an array for which theithelement is the price of a given stock on dayi. If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stoc...

weixin_30314631的博客 75

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

10个LeetCode高频算法类型全解析:基于gh_mirrors/leetcode21/leetcode项目

如果你正在准备技术面试或想提升编程能力,掌握LeetCode高频算法类型是必不可少的。本指南基于gh_mirrors/leetcode21/leetcode项目,为你解析10个最重要的算法类型,帮助你快速提升解题能力。这个项目包含了229道LeetCode题解,涵盖C++、Java、Python、SQL和Shell Script多种语言实现,是学习算法和数据结构的最佳资源。 ## 📊 为什么算

gitblog_00434的博客 1078

leetcode刷题21 合并两个有序链表 Merge Two Sorted Lists(简单) Python Java

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 知识点: 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表...

SpringRolls的博客 899

leetcode刷题292 Nim游戏 Nim Game(简单) Python Java

题目描述: 你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。 你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。 示例: 输入: 4 输出: false 解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛; 因为无论你拿走 1 块、2 ...

SpringRolls的博客 793

leetcode刷题268 缺失数字 Missing Number(简单) Python Java

题目大意 给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。 示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [9,6,4,2,3,5,7,0,1] 输出: 8 说明: 你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现? 解法一:加总,求差 class Solution: d...

SpringRolls的博客 740

leetcode刷题202 快乐数 Happy Number(简单) Python Java

题目描述 编写一个算法来判断一个数是不是“快乐数”。 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。 示例: 输入: 19 输出: true 解释: 1² + 9² = 82 8² + 2² = 68 6² + 8² = 100 1² + 0...

SpringRolls的博客 583

leetcode刷题69 x的平方根 Sqrt(x)(简单) Python Java

题目大意: 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。 解法一:使用二分查找法,对中间数进行判断,如果mi...

SpringRolls的博客 489

leetcode刷题155 最小栈 Min Stack(简单) Python Java

题目概述: 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) – 将元素 x 推入栈中。 pop() – 删除栈顶的元素。 top() – 获取栈顶元素。 getMin() – 检索栈中的最小元素。 示例 MinStack minStack = new MinStack(); minStack.push(-2); minStack.push...

SpringRolls的博客 482

leetcode刷题9 回文数 Palindrome Number(简单) Python Java

题目描述: 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例1: 输入: 121 输出: true 示例2: 输入: -121 输出:假 解释:从左向右读,为-121。从右向左读,为121-。因此它不是一个回文数。 示例3: 输入: 10 输出: false 解释:从右向左读,为01。因此它不是一个回文数。 第一种方法,...

SpringRolls的博客 440

leetcode刷题136 只出现一次的数字 Single Number(简单) Python Java

题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 解法1: 重新申请一个列表s=[],遍历这个数组: 1.如果不在这个新的列表中: ...

SpringRolls的博客 436

leetcode刷题171 Excel表列序号 Excel Sheet Column Number(简单) Python Java

题目大意: 给定一个Excel表格中的列名称,返回其相应的列序号。 例如, A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ... 示例 1: 输入: "A" 输出: 1 示例2: 输入: "AB" 输出: 28...

SpringRolls的博客 402
上一篇: python 中 is, is not ,==, != 的区别
下一篇: leetcode刷题122 买卖股票的最佳时机 Best Time to Buy and Sell Stock II(简单) Python Java
SpringRolls
博客等级 码龄9年 73粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值