LeetCode-122. 买卖股票的最佳时机 II

news2024/11/18 12:35:26

目录

    • 暴力递归
    • 动态规划
    • 贪心

题目来源
122. 买卖股票的最佳时机 II

暴力递归

根据题意:由于不限制交易次数,在每一天,就可以根据当前是否持有股票选择相应的操作。「暴力搜索」在树形问题里也叫「回溯搜索」、「回溯法」。
首先画出树形图,然后编码。
在这里插入图片描述

class Solution {
    public int maxProfit(int[] prices){
        int len = prices.length;
        if (len < 2){
            return 0;
        }
        return process(prices,0,0);

    }

    //prices数组
    //index索引,从0开始
    //status持有状态。0不持有,1持有
    private int process(int[] prices, int index, int status) {
        if (index == prices.length){  //当索引越界,直接返回0
            return 0;
        }
        int max;
        if (status == 0){  //表示不持有状态
            int p1 = process(prices,index+1,1)-prices[index];  //买票,状态变成持有
            int p2 = process(prices,index+1,0);   //不买票,继续不持有
            max = Math.max(p1, p2);
        }else {  //表示持有状态
            int p1 = process(prices,index+1,0)+prices[index];   //卖票,状态变成不持有
            int p2 = process(prices,index+1,1);  //不卖票,继续持有
            max = Math.max(p1, p2);
        }
        return max;
    }

}

在这里插入图片描述

动态规划

直接暴力递归改动态规划

1.process函数直接改成dp
2.dp定义数组是需要看process函数有几个参数要变化(如果process函数有一个参数变化就是定义一维数组)
3.动态规划的返回值是process函数的返回值
在这里插入图片描述

class Solution {
    public int maxProfit(int[] prices){
        int len = prices.length;
        if (len < 2){
            return 0;
        }
        int[][] dp = new int[len+1][2];
        for (int i = len-1; i>=0; i--) {
            dp[i][0] = Math.max(dp[i+1][1]-prices[i], dp[i+1][0]);
            dp[i][1] = Math.max(dp[i+1][0]+prices[i], dp[i+1][1]);
        }
        return dp[0][0];
    }
}

在这里插入图片描述

贪心

首先买卖股票一定得是赚钱的,也就是说我们的利润一定的是正数,所以此时我们只用遍历一次数组,将每天的差值记录下来,只取正数之和就是最后的答案,下面
举一个例子:

  • 数组[7,1,2,5,3,2,6,4],此时我们根据题意很容易可以得到,如果我们在第二天,即股票价格为1的时候买入,在第四天,即股票价格为5的时候卖出,我们此时可以赚4。同理,在第六天买入,在第七天卖出,此时赚4,总共赚4 + 4 = 8。
  • 我们此时进行分析,我们可以将第二天买入第四天卖出时,赚的钱可以划分为二到三天赚的钱1,加上三到四天赚的钱3,3 + 1 = 4。同理,第六天买入第七天卖出,赚的钱为六到七天赚的钱4,总共赚4 + 4 = 8,我们此时再进行求出该数组各个区间的差值为[-6,1,3,-2,-1,4,-2],我们很容易发现我们总共赚的钱其实就是区间差值为正值之和。
  • 所以我们可以将赚的钱进行区间化,只进行记录差值为正值的值,并进行求和即为最后答案。

代码实现

class Solution {
    public int maxProfit(int[] prices) {
        if(prices.length < 2 || prices == null){
            return 0;
        }
        int ans = 0;
        for(int i = 1;i<prices.length;i++){
            ans += Math.max(0,prices[i]-prices[i-1]);
        }
        return ans;
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/192050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何实现报表集成?(二)——用户同步和单点登录

在上一篇&#xff0c;我们对报表集成进行了一个整体的介绍&#xff0c;从报表集成的背景、痛点、需求、集成架构等几个方面进行了阐述。 这一篇&#xff0c;我们来聊一下用户同步和单点登录。行文过程中得到了来自报表软件厂商 Smartbi 的报表产品&#xff1a;电子表格软件的协…

c++11 标准模板(STL)(std::multiset)(三)

定义于头文件 <set> template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class multiset;(1)namespace pmr { template <class Key, class Compare std::less<Key>> usi…

怎么给视频配音好听?这些好方法快学起来

应该不少小伙伴每天都会刷各种短视频&#xff0c;有些视频很搞笑&#xff0c;有些却很无趣&#xff0c;让人想直接的划走。很多制作短视频的小伙伴应该都知道&#xff0c;很多视频都需要配音来衬托&#xff0c;吸引别人的眼球。当你想给自己的视频配上好听的声音&#xff0c;但…

QT/C++——网络编程

目录 一、基础知识复习 二、UDP 客户端&#xff1a; 服务器&#xff1a; 三、TCP 服务器&#xff1a; 客户端&#xff1a; 四、小项目 客户端&#xff1a; 服务器&#xff1a; 一、基础知识复习 这部分内容前面讲的比较详细&#xff0c;现在就是简单复习一下。 两台主…

OAuth2授权机制介绍指南

目录 一、什么是OAuth2&#xff1f; 二、OAuth2中有哪些角色&#xff1f; 三、OAuth2的授权流程&#xff1f; 四、OAuth2令牌的特点&#xff1f; 五、OAuth2有哪些授权方式&#xff1f; 5.1 授权码 5.2 隐藏方式 5.3 密码方式 5.4 凭证方式 一、什么是OAuth2&#xff1f; …

PowerCLi 批量多esxi主机创建登陆用户

官网PowerCLI参数配置参考 New-VMHostAccount 创建用户参考New-VIRole 创建权限组参考Get-VIPrivilege 查询所有角色层配置信息参考创建esxi登陆用户一键脚本,目前只能单

2023年软考报哪门比较好?

2023年软考报名还有一个月左右就会启动了&#xff0c;大家有想好报考哪门吗&#xff1f;不妨看看下文&#xff0c;让你的思路更加清晰。 软考科目汇总&#xff1a; (1)高级资格&#xff1a;网络规划设计师、系统规划与管理师、系统架构设计师、信息系统项目管理师、系统分析师…

磨金石教育技能干货分享|年味摄影作品选登:你的春节怎么过的

要问年味是什么&#xff1f;味&#xff0c;是一种感觉&#xff0c;年味就是&#xff1a;除夕夜里&#xff0c;红灯笼挂满街道&#xff0c;各种年货摆满长街。各种美食充满餐桌&#xff0c;亲人团聚&#xff0c;欢笑一堂。这种让人放松、快乐的感觉就是过年特有的味道。最近由长…

MySQL(一)

性能监控 使用show profile查询剖析工具&#xff0c;可以指定具体的type type all&#xff1a;显示所有性能信息 show profile all for query n block io&#xff1a;显示块io操作的次数 show profile block io for query n context switches&#xff1a;显示上下文切换次数&a…

【算法基础】整数二分查找法

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前是C语言学习者 ✈️专栏&#xff1a;【C/C】算法 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞…

[golang Web开发] 1.golang web开发简介以及web服务器的搭建以及http协议简介

一.web开发简介 1.简介 Web应用在我们的生活中无处不在,看看我们日常使用的各个应用程序,它们要么是 Web应用&#xff0c;要么是移动 App 这类 web应用的变种,无论哪一种编程语言&#xff0c;只要它能够开发出与人类交互的软件&#xff0c;它就必然会支持 Web应用开发,对一门崭…

高精度压缩Transformer,NNI剪枝一站式指南

无论在学术界还是产业界&#xff0c;今年人工智能大模型都是爆款话题。但面对这些动不动就数十亿级别参数的模型&#xff0c;使用传统方法微调&#xff0c;宛如水中捞月、海底捞针。作为微软亚洲研究院为科研人员和算法工程师量身定制的一站式 AutoML&#xff08;自动机器学习&…

Vertical-align属性值区分

先简单看一下官方文档上的Vertical-align这些属性值的描述&#xff0c;虽然只有简单的描述&#xff0c;但其实描述的很清楚&#xff0c;但有时只看文字并不能很好的理解其含义。 下面结合代码图说明&#xff1a; 首先&#xff0c;我建造了一个背景颜色为绿色的div盒子&#xf…

9、app稳定性测试之monkey工具使用

简介 方法:利用Monkey工具,选择某些场景做持续反复操作,以衡量系统的稳定性 工具: monkey 友盟埋点 日志分析工具 系统监控工具GT 场景: * 随机测试 可以用monkey模拟 * 多个运行中app切换测试&#xff1b; * 各种事件打扰&#xff0c;如插拔数据线、电话打扰、收…

软件测试之冒烟测试须知

冒烟测试的介入时间? 开发编码完成&#xff0c;自测通过以后为最佳介入时间。 如果开发无自测直接提交&#xff0c;一般冒烟测试通过率会很低【除非你遇到的是大内高手】 什么需求需要做冒烟测试? 理论上&#xff0c;所有的需求均可以做冒烟测试。 冒烟测试需要做几轮? 一轮…

分享会上狂吹MySQL的4大索引结构,没想到大家的鉴赏能力如此的~~~~

索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维护着满足 特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#xff09;数据&#xff0c; 这样就可以在这些数据结构 上实现高…

企业需要做哪些准备,来落地商业智能 BI 系统

随着新一代信息化、数字化技术的应用&#xff0c;引发了新一轮的科技革命&#xff0c;现代化社会和数字化的联系越来越紧密&#xff0c;数据也变成继土地、劳动力、资本、技术之后的第五大生产要素&#xff0c;这一切都表明世界已经找准未来方向&#xff0c;前沿科技也与落地并…

中国电子学会2022年09月份青少年软件编程Scratch图形化等级考试试卷四级真题(含答案)

2022-09 Scratch四级真题 分数&#xff1a;100 题数&#xff1a;29 测试时长&#xff1a;60min 一、单选题(共15题&#xff0c;共30分) 1.运行下列程序&#xff0c;说法正确的是&#xff1f;&#xff08;D&#xff09; A.列表中的数字全部小于11 B.列表的长度为10 C.变量…

项目管理:甘特图的作用是什么?

在我们工作和学习中&#xff0c;有一个提高工作效率&#xff0c;简单又实用的神器——甘特图。 甘特图以表格进度条&#xff0c;展示任务列表和时间表示出项目的持续时间及进度。并根据实际执行时间和工期对计划进行动态调整的进度控制方法。 甘特图将各个任务的完成情况在时间…

论Unity_InputSystem如何使用(三)

PlayerInput InputSystem提供专门用来处理玩家输入的组件&#xff0c;通过关联配置输入文件&#xff0c;可以不需要编写设备输入的相关逻辑&#xff0c;专注于编写输入触发后的逻辑。 如何添加 创建一个Cube&#xff0c;点击Add Component&#xff0c;搜索Player Input即可添…