[记录]买卖股票的最佳时机——C

【经典算法】LeetCode 121. 买卖股票的最佳时机(Java/C/Python3实现含注释说明,Easy) 对比项一次遍历(贪心算法)动态规划解题思路每次选择当前状态下的最优解,不考虑未来的变化构建状态转移方程,逐步求解,保存中间结果适用场景局部最优选择能直接导致全局最优,如连续上涨的市场涉及多次买入卖出、考虑冷冻期、手续费等复杂情况空间复杂度O(1),较低,只需保存当前状态信息O(n),较高,需保存多个状态的最优解时间复杂度O(n), 较低,通常一次遍历即可O(n),较高,需遍历所有可能状态全局最优性保证不一定能保证全局最优解可以得到全局最优解灵活性较低,适用于简单直接的交易策略。 阅读详情

给定一个数组 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。

暴力肯定不行,因为我试过了

贪心:

int maxProfit(int* prices, int pricesSize){
    int i,numMin,max=0;
    numMin=prices[0];
    for(i=0;i<pricesSize;i++)
    {
        if(prices[i]<numMin)
        {
            numMin=prices[i];
        }

        if(prices[i]-numMin>max)
        {
            max=prices[i]-numMin;
        }
    }
    return max;
}

dp:

int maxProfit(int* prices, int pricesSize)
{
    //动态规划,dp[i][j]在第i天是否持有股票 j = 1持有  j = 0卖出 
    int dp[pricesSize][2];
    int i;
    dp[0][0] = 0;   
    dp[0][1] = -prices[0];
    for(i = 1; i < pricesSize; i++ )
    {
        //第i天没有股票,有两种情况 昨天没有买 今天保持  昨天买了今天 卖出了
        dp[i][0] = fmax(dp[i-1][0],dp[i-1][1] + prices[i]);
        //第i天持有股票,有两种情况 昨天没有买 今天保持  昨天没买了  今天买
        dp[i][1] = fmax(dp[i-1][1],-prices[i]);
    }
    //for(i = 0; i < pricesSize; i++ )
    //    printf("i = %d dp[0]:%d  dp[1]:%d\n",i,dp[i][0],dp[i][1]);
    return dp[pricesSize-1][0];
}

银河麒麟V11 + KVM/QEMU + GT 710 GPU直通 Win10 完整操作流程文档 宿主机:RTX 5080专门运行ollama大模型服务,通过SSH/VNC远程管理Win10虚拟机:GT 710直通,物理键盘专属,通过物理显示器处理视频应用硬件隔离:两个系统完全隔离,互不干扰,性能最大化两种不同的直通方式直通方式 配置方法 设备在宿主机的状态 典型应用场景PCIe设备直通 vfio-pci.ids=10de:128b,10de:0e0f 设备完全从宿主机消失,被vfio-pci驱动接管 GPU、网卡、NVMe硬盘。 阅读详情

相关推荐

从TCGA官网获取新版count数据并精准转换为TPM的实战指南

本文详细介绍了从TCGA官网获取新版count数据并精准转换为TPM的实战指南。通过TCGAbiolinks工具下载原始count数据,结合GENCODE v36注释文件计算基因有效长度,最终实现count到TPM的标准化转换,确保数据完整性和分析可靠性。文章包含完整代码示例和常见问题解决方案,特别适合生物信息学研究人员参考。

weixin_27310417的博客 284

刷题记录:leetcode: 122买卖股票的最佳时机|| 动态规划。c语言

思路:每天有两种可能,一种是持有股票,一种是不持有股票,如果持有股票,可能是因为前一天就持有股票,也可能是前一天没有股票,今天刚买的。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。另一种同样的道理,不持有股票,可能是前一天就不持有股票,也可能是前一天持有股票,今天才卖出,然后比较,选出大的,赋值给今天不持有股票的状态。我们只需要前一天的状态来确定今天的状态,利润一直是取最大的,所以不用创建数组。

qq_49962875的博客 101

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作...

写在前面: ???? 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。???? ???? 人生如戏,我们并非能选择舞台和剧本,但我们可以选择如何演绎 ????感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行~~~文章目录引言一、油门标定原理1.1 油门与速度、加速度的关系1.2 油门控制曲面模型的构建二、油门标定表的制作流程...

qq_35485206的博客 2140

LeetCode 121.买卖股票的最佳时机-C语言

LeetCode 121.买卖股票的最佳时机-C语言 题目描述 解题思路 从前向后遍历一次,记录当前遇到的最小值和最大值。 注意最大值应该在最小值之后。 每次得出最大值和最小值的时候就和maxprofit比较取最大。 代码 int maxProfit(int* prices, int pricesSize){ if (pricesSize == 0) { return 0; } int minPrice = prices[0]; int maxprofit

qq_45401555的博客 381

AUTOSAR TcpIp模块 以太网配置开发2

someip协议之tcpIp协议

汽车电子电气 1085

C#实现鼠标点击任意绝对位置(附完整源码)

C#实现鼠标点击任意绝对位置(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 482

力扣网编程122题:买卖股票的最佳时机II

力扣网编程122题:买卖股票的最佳时机II

wojiaxiaohuang2014的博客 366

【LAMMPS学习】四、运行 LAMMPS(2)命令行选项

本部分解释了在安装可执行文件或下载源代码并构建可执行文件后如何运行 LAMMPS。命令文档页面描述了输入脚本的结构以及它们可以包含的命令。

荷塘阅色 5244

买卖股票的最佳时机(数组技巧leetcode121)-------------c语言实现

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

yusude123456的博客 152

Windows 11 - 打开操作安全中心提示 “需要使用新应用以打开此 Windowsdefender 链接“ 解决方案(电脑更新了 Win11 系统版本后,想关闭病毒防护盾牌的时候提示打不开)

Windows 11 - 打开操作安全中心提示 "需要使用新应用以打开此 Windowsdefender 链接" 解决方案(电脑更新了 Win11 系统版本后,想关闭病毒防护盾牌的时候提示打不开),当您点击任务栏上要关闭安全中心防护设置时,这种情况打不开怎么解决,怎么办,Windows安全中心,病毒和威胁保护,账户保护,防火墙和网络保护,设备安全性。

🏆 前端领域优质创作者 1万+

Backtrader Web:开源量化交易全栈平台

Backtrader Web是一个基于Backtrader框架的现代化量化交易全栈平台,将专业回测引擎与Web技术结合,提供从策略开发到实盘交易的完整解决方案。平台采用FastAPI+Vue3技术栈,具有118个内置策略模板、专业可视化分析工具和完整的策略生命周期管理功能。支持策略版本控制、参数优化、模拟/实盘交易及监控告警,通过RESTful API和WebSocket实现前后端交互。系统采用模块化设计,包含策略服务、回测服务等核心模块,支持SQLite/PostgreSQL等多种数据库。安装简单,5分钟

云金杞 646

LintCode--买卖股票的最佳时机

原题链接:http://www.lintcode.com/zh-cn/problem/best-time-to-buy-and-sell-stock/ 假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格。如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润。 样例 给出一个数组样例 [3,2,3,1,2], 返回 1

chan15的博客 1199

c语言实现求一个矩阵特征值和特征向量

前言 求矩阵的特征值,主要是用的QR分解,在我的有一次博客里,我已经详细地给出了计算的过程,大家有兴趣可以去看下,经过几天的钻研,终于完成了整个的eig算法。下面我将把我的整个代码附上,有不懂的可以问我,欢迎一起讨论学习! 这是对上一次的修改版,上一次写的程序是在C++编译环境下编译的,所以放在c里面编译有些会出错。 最后,如果有不对的地方希望大...

qq_36417014的博客 2万+

面试经典算法题84-买卖股票的最佳时机 IV

公众号:阿Q技术站。

qq_44630255的博客 234

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LeetCode121买卖股票的最佳时机-C语言、Python

 方法一:直接遍历,时间复杂度为O(n^2) int maxProfit(int* prices, int pricesSize) { //直接遍历 int max = 0; int i,j; for(i = 0; i &lt; pricesSize - 1; i++) for(j = i+1; j &lt; pricesSize; j+...

a_learning_boy的博客 223

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Day18.

要想收益最大,买股票一定要最低价购入,所以定义一个minprice记录prices数组中股票的最低价格,最大利润maxprofit则为prices[i]-minprice。解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;解释:在这种情况下, 没有交易完成, 所以最大利润为 0。输入:prices = [7,6,4,3,1]输入:[7,1,5,3,6,4]

wschichi的博客 275

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【力扣刷题实战】买卖股票的最佳时机

文章目录目录力扣题目:买卖股票的最佳时机题目描述解题思路问题理解算法选择具体思路解题要点完整代码(C++)兄弟们共勉 !!! 每篇前言原题链接:121. 买卖股票的最佳时机 - 力扣(LeetCode)给定一个数组 ,它的第 个元素 表示一支给定股票第 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 。示例 1: 输入:[7,1,5,3,6,4] 输

2401_85548793的博客 1147

代码随想录-算法训练营day48(动态规划10:买卖股票的最佳时机,买卖股票的最佳时机2)

动态规划10:买卖股票

weixin_61931006的博客 1231

每日一题——买卖股票的最佳时机

每日一题——买卖股票的最佳时机

zxjiaya的博客 835

动态规划LeetCode-121.买卖股票的最佳时机1

那我们买卖股票的有两种状态,一种是持有一种不持有,所以我们定义二维数组dp[i][0]、和dp[i][1],dp[i][0]表示第i天持有股票时手上所得的最大现金,dp[i][1]表示第i天不持有股票手上所得的最多现金。我们特别要注意一个点是,这里说到“持有”,不代表买入,我们dp[i][0]记录的是注意只是记录,记录第i天持有股票时手上所得的最大现金,而买入是一种结果,买入的话是不是会扣钱,买入某一天的股票则是-prices[i],而是否真正的要买入则要比较,是不是最低价格的买入,以便后续最高利润卖出。

2303_80070412的博客 1857

买卖股票的最佳时机【C++】

买卖股票的最佳时机有很多变形题,他们有的可以暴力、贪心等方法求解,但是都可以用动态规划的思路进行求解,需要重点掌握。

xaiobai123的博客 1061

LeetCode第188题_买卖股票的最佳时机IV

给定一个整数数组prices,它的第i个元素prices[i]是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成k笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

qq_40263592的博客 1175

第 121. 买卖股票的最佳时机

本题属于典型的动态规划或贪心算法问题。因为要在一个序列中找到两个元素,使得它们的差值最大,且第二个元素必须在第一个元素之后。设计一个算法来计算你所能获取的最大利润。如果不能获取任何利润,返回 0。LeetCode 第 121 题是“买卖股票的最佳时机”,题目描述为:给定一个数组。买入这只股票,并选择在。

qq_40844444的博客 662

买卖股票的最佳时机问题 C++

打包/解包,不打开它,直接看内容参数组合:(这里需要注意的是:-f 后面不能再加别的参数,-f 只能作为最后一个参数)tar -czf xxx.tgz xxx :打包并压缩tar -xzf xxx.tgz :解压并解包(默认在当前路径下解压并解包)tar -xzf xxx.tgx -C 指定路径 :在指定路径下解压并解包,-C后面接指定的路径-v:看到打包压缩或者解压解包的过程代码语言:javascript将lesson5打包并压缩将lesson5.tgz解压并解包到当前路径下。

2509_93923299的博客 931

动态规划LeetCode-123.买卖股票的最佳时机3

dp[i][1]:还未进行第一次买入的时候,我们手上的现金为0,那如果我们要是进行第一次买入,那就是无操作所得的最大现金dp[i][0]减去prices[i]得到第i天第一次持有股票时手上的最大现金,这个与第i-1天的dp[i][1]进行比较取最大值,每天记录保存的是第一次持有股票时手上的最大现金。dp[i][4]:第0天,如果进行第二次不持有,手上的最大现金就是0 - prices[0] + prices[0] - prices[0] + prices[0] = 0,所以dp[0][4] = 0;

2303_80070412的博客 1053

动态规划LeetCode-122.买卖股票的最佳时机2

那么第i天持有股票即dp[i][0],如果是第i天买入股票,所得现金就是昨天不持有股票的所得现金减去今天的股票价格 即:(dp[i-1][1] - prices[i])。不是真正的买入卖出,比如买入,求每个dp[i][0]时并不是真正的买入,是持有,因为买入要最低价格的时候买入,我们每个dp[i][0]记录的是持有股票时最低价格,推导是最后dp[pricesSize-1][0]这个值就是真正买入的最低价格。那我们知道1的递推公式:dp[i][0] = dp[i-1][0] > -prices[i]?

2303_80070412的博客 785
上一篇: 软件工程到底能不能教会不怎么写程序的人开发软件?
下一篇: 重塑矩阵——真是难搞
Whtiewww
博客等级 码龄7年 54粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值