【LeetCode】剑指 Offer 63. 股票的最大利润 p304 -- Java Version

news2024/11/15 23:31:49

题目链接:https://leetcode.cn/problems/gu-piao-de-zui-da-li-run-lcof/

1. 题目介绍(63. 股票的最大利润)

假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?

【测试用例】:
在这里插入图片描述

【条件约束】:
在这里插入图片描述

【相关题目】:

  • 注意:本题与主站 121. 买卖股票的最佳时机 题目相同。

2. 题解

2.1 一次遍历 – O(n) ⭐

时间复杂度O(n),空间复杂度O(1)

假设给定的数组为:[7, 1, 5, 3, 6, 4]
如果我们在图表上绘制给定数组中的数字,我们将会得到:
在这里插入图片描述
解题思路】:
要想获得最大收益:那么我们一定要在 最低点买入,最高点卖出 才行,同时还存在一个前提:必须先买入,后卖出,这个很好理解,简言之,你还没买呢,拿什么卖呢;所以我们就得到了一个关键信息:假设我们想要在第 i 天卖出股票,那么最低点只可能是 前 i-1天的某一天
……
想清楚了以上思路,我们就很容易解题了:
我们可以假设 f(i) 为卖出价为数组中第 i 个数字时可能获得的最大利润。显然,在卖出价固定时,买入价越低获得的利润越大。也就是说,如果在扫描到数组中第 i 个数字时,只要我们能够记住之前的 i -1 个数字中的最小值,就能计算出在当前价位卖出时可能得到的最大利润。
……
实现策略】:

  1. 定义变量 minmaxProfit,用来记录 第 i 个数字前的最小值,以及当前的最大利润;
  2. 遍历数组,逐一判断和更新最小值和最大利润;
  3. 遍历结束,判断一下利润是否为正,即存在收益,如果收益为负,则返回0,收益为正,则正常返回。
    在这里插入图片描述
class Solution {
    // Solution1:
    // 我们要找出卖出价为 i 时的最大利润
    // 那么关键点就在于如何找到 前 i-1 个数中的最小值
    public int maxProfit(int[] prices) {
        if (prices.length <= 1) return 0; // 无效输入判断
        int min = prices[0];
        int maxProfit = prices[1] - min;
        for (int i = 2; i < prices.length; i++) { // 遍历数组
            if (prices[i-1] < min) min = prices[i-1]; // 如果后面遍历到的元素小于最小值,那么就替换min
            int currProfit = prices[i] - min; // 那么当前的收益就发生了改变
            maxProfit = Math.max(maxProfit,currProfit); // 保留最大利益
        }
        return maxProfit < 0 ? 0 : maxProfit; // 负收益的情况返回0
    }
}

在这里插入图片描述

该题还可以通过动态规划来理解:
在这里插入图片描述
状态转移方程:
在这里插入图片描述
殊途同归:和一次遍历是一样的,这里也就是学习一下动态规划的思路。

class Solution {
    public int maxProfit(int[] prices) {
        int cost = Integer.MAX_VALUE, profit = 0;
        for(int price : prices) {
            cost = Math.min(cost, price);
            profit = Math.max(profit, price - cost);
        }
        return profit;
    }
}

在这里插入图片描述

3. 参考资料

[1] 股票的最大利润 – 力扣官方题解
[2] 面试题63. 股票的最大利润(动态规划,清晰图解)-- Krahets

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

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

相关文章

自然语言处理 —— 02 基于规则的词法分析

一、什么是词法分析? 词:是自然语言中能够独立运用的最小单位,是语言信息处理的基本单位。 词法分析:是词汇层的分析技术。主要包括词的识别、形态分析、词性标注等任务。 1. 词的识别 将句子转换成词序列【就是分词?】 2. 形态分析 词的构成、形态变化、词形还原。 …

物联网定位技术|实验报告|实验三 PDM定位算法

目录 1. 实验目标 2. 实验要求 3. 算法介绍 3.1 PDM算法 4. 算法实现 第一步&#xff1a;将数据读入内存 第二步&#xff1a;判断锚节的个数 第三步&#xff1a;将所有的两点间的距离关系读入距离矩阵 第四步&#xff1a;利用最短路径算法 第五步&#xff1a;构造节点跳数矩…

JVM-0419~20

类的加载 类的加载过程&#xff08;生命周期&#xff09; 类的加载分几步&#xff1f; 按照Java虚拟机规范&#xff0c;从class文件到加载到内存中的类&#xff0c;到类卸载出内存为止&#xff0c;它的整个生命周期包括如下7个阶段&#xff1a; 基本数据类型在虚拟机里面都预…

【智能座舱系列】-华为发布全球首款车载光场屏 开拓车载视觉体验新航道

4月16日,2023华为智能汽车解决方案“内赋智能,焕发新生”新品发布会在上海举行,华为正式发布全新车载娱乐屏品类:HUAWEI xScene 光场屏。该产品采用独创的光学引擎技术,具有大画幅、景深感、低晕动、眼放松等特点,大幅提升车内视觉体验。 华为光场屏:私人影院装入车内,…

非常详细的阻抗测试基础知识

编者注&#xff1a;为什么要测量阻抗呢&#xff1f;阻抗能代表什么&#xff1f;阻抗测量的注意事项... ...很多人可能会带着一系列的问题来阅读本文。不管是数字电路工程师还是射频工程师&#xff0c;都在关注各类器件的阻抗&#xff0c;本文非常值得一读。全文13000多字&#…

2. 算法分析

2. 算法分析 研究算法的最终目的就是如何花更少的时间&#xff0c;如何占用更少的内存去完成相同的需求。 我们要计算算法时间耗费情况&#xff0c;首先我们得度量算法的执行时间&#xff0c;那么如何度量呢&#xff1f; 2.1 算法的时间复杂度分析 事后分析估算方法&#x…

关于web安全测试在功能测试中的应用

关于web安全测试在功能测试中的应用 一、安全基本概念1.1实施安全评估1.1.1资产等级划分1.1.2威胁分析1.1.3风险分析1.1.4 安全方案 1.2 安全原则 二、我的安全测试模型三、安全测试在功能测试中的应用3.1 更改url3.2 逻辑缺陷&#xff1a;3.3 破坏流程顺序3.4 接口提示信息3.5…

HNU-计算机系统-讨论课5

WARNING&#xff1a; 本题为开放性题目&#xff0c;所设计的也仅仅是一个可能的模型而已&#xff0c;再考虑到个人水平有限。在呈现效果上难免会有缺漏以及可行性的缺陷。故请批判性地接收&#xff01; 所以如果知识有错误或者缺漏&#xff0c;请一定要指出&#xff0c;您的建…

计算机类大学生竞赛经验分享

如果你是作为一个科班出生的学习编程方向的一名在校大学生&#xff0c;那么如果对竞赛感兴趣&#xff0c;可以看看这篇文章 本人作为一名前端开发方向的学生&#xff0c;将自己这几年的参赛经验和比赛相关类型介绍分享给大家 首先我们要知道&#xff0c;竞赛分为三种大概的方向…

《类和对象》(上篇)

本文主要对类和对象有一个初步的了解。 文章目录 前言1、类的引入和定义2、类的访问限定符及封装2.1 访问限定符2.2 封装 3 、类的作用域4 、类的实例化5 、类对象的模型5.1 类对象的大小5.2 类对象存储方式 6、this 指针6.1 引子6.2 特性6.3 this指针的一个问题 前言 C语言是面…

MySQL插入和查询blob字段类型的sql语句

创建表&#xff1a; CREATE TABLE t_inpatient_medical_records ( id bigint(20) NOT NULL AUTO_INCREMENT, inpatient_record_code varchar(32) DEFAULT NULL COMMENT 就诊流水号, patient_name varchar(256) DEFAULT NULL COMMENT 患者姓名, pat_id varchar(16) DEFAULT NULL…

java数据类型的转换以及精度丢失

java数据类型的转换以及精度丢失_long转double会丢失精度吗_ღLiJia的博客-CSDN博客 一.浮点类型在计算机当中的存储 float存储需求是4字节&#xff08;32位&#xff09;, 其中1位最高位是符号位&#xff0c;中间8位表示阶位&#xff0c;后32位表示值 float的范围: -2^128 ~ …

搞懂哈希散列

文章目录 1. 哈希概念2. 如何解决哈希冲突&#xff1f;3. 哈希函数概念4. 闭散列(目前淘汰的方法&#xff0c;了解&#xff09;**4.1.线性探测****4.2. 二次探测**4.3 闭散列查找与删除 5. 开散列6. 开散列与闭散列比较 1. 哈希概念 搜索树需要多次的关键码比较来搜索到结果&a…

AutoGPT、AgentGPT、BabyAGI、HuggingGPT、CAMEL:各种基于GPT-4自治系统总结

ChatGPT和LLM技术的出现使得这些最先进的语言模型席卷了世界&#xff0c;不仅是AI的开发人员&#xff0c;爱好者和一些组织也在研究探索集成和构建这些模型的创新方法。各种平台如雨后春笋般涌现&#xff0c;集成并促进新应用程序的开发。 AutoGPT的火爆让我们看到越来越多的自…

Linux 3.14的设备树-实战开发代码

OF提供的函数主要集中在drivers/of/目录下&#xff0c;有address.c,base.c,device.c,fdt.c,irq.c,platform.c等等 1&#xff0c;根据deice_node结构的full_name参数&#xff0c;在全局链表of_allnodes中&#xff0c;查找合适的device_node struct device_node *of_find_node_by…

概率/期望dp

思维方式 概率/期望dp都是分析从当前状态能否去到其他情况&#xff0c;然后进行期望/概率公式的运算&#xff0c;最后消元推导出一般式。 ​​​​​​Problem - 4089 (hdu.edu.cn) 思路&#xff1a;概率dp&#xff0c;正推 分类讨论&#xff0c;设dp[i][j]表示i人的队伍在…

力扣sql中等篇练习(八)

力扣sql中等篇练习(八) 1 确认率 1.1 题目内容 1.1.1 基本题目信息1 1.1.2 基本题目信息2 1.1.3 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # 分别统计没确认的用户和已经确认了的用户 SELECT s.user_id,ROUND(SUM(IF(c.actionconfirmed,1,0))/count(*),2) co…

GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例应用

如今&#xff0c;Earth Engine凭借其强大的功能正受到越来越多国内外科技工作者的关注&#xff0c;应用范围也在不断扩大。学习致力于帮助科研工作者掌握Earth Engine的实际应用能力&#xff0c;以Python编程语言为基础&#xff0c;结合实例讲解平台搭建、影像数据分析、经典应…

JAVA开发(H5商城嵌套到第三方H5商城进行异业合作方案)

需求背景&#xff1a; 很多电商网站或者说是购物网站都是H5商城的方式&#xff0c;每个公司都有自己的H5商城。当公司和公司之间进行异业合作&#xff0c;商城互相导流甚至商城聚合时就需要H5商城和H5商城的嵌套和对接。假如存在A商城和B商城&#xff0c;现在需要B商城入驻到A商…

CrackMapExec 域渗透工具使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、CrackMapExec 是什么&#xff1f;二、简单使用1、获取帮助信息2、smb连接执行命令3、使用winrm执行命令&#xff08;躲避杀软&#xff09;4、smb 协议常用枚…