LeetCode(7)买卖股票的最佳时机【数组/字符串】【简单】

在这里插入图片描述

目录

    • 1.题目
    • 2.答案
    • 3.提交结果截图

链接: 121. 买卖股票的最佳时机

1.题目

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

提示:

  • 1 <= prices.length <= 105
  • 0 <= prices[i] <= 104

2.答案

class Solution {
    public int maxProfit(int[] prices) {
        int max = 0;
        List<Integer> valueList = new ArrayList<>();
        Map<Integer, List<Integer>> positionMap = new HashMap<>();
        for (int i = 0; i < prices.length; i++) {
            if (!positionMap.containsKey(prices[i])) {
                // 如果不存在
                List<Integer> newPositions = new ArrayList<>();
                newPositions.add(i);
                positionMap.put(prices[i], newPositions);
                valueList.add(prices[i]);
            } else {
                // 如果存在
                positionMap.get(prices[i]).add(i);
            }
        }
        // 按照从大到小排列
        valueList.sort((o1, o2) -> Integer.compare(o1, o2) * -1);
        for (int i = 0; i < valueList.size(); i++) {
            for (int j = valueList.size() - 1; j > i; j--) {
                // 如果大数的位置在小数之后则更新
                List<Integer> biggerPositions = positionMap.get(valueList.get(i));
                List<Integer> smallerPositions = positionMap.get(valueList.get(j));
                Integer biggerPosition = biggerPositions.get(biggerPositions.size() - 1);
                Integer smallerPosition = smallerPositions.get(0);
                if (biggerPosition > smallerPosition) {
                    max = Math.max(valueList.get(i) - valueList.get(j), max);
                    break;
                }
            }
        }
        return max;
    }
}

3.提交结果截图

在这里插入图片描述

整理完毕,完结撒花~ 🌻

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Shell编程入门--概念、特性、bash配置文件

目录 一、Shell概念1.定义2.分类和使用场景2.1.分类和切换2.2.使用场景 3.特性3.1.文件描述符与输出重定向3.2.历史命令---history3.3.别名 --alias3.4.命令排序执行3.5.部分快捷键3.6.通配符置换 4.脚本规范5.脚本运行方式5.1.bash脚本执行5.2.bash脚本测试 二、bash配置文件1…

抢占全球30%碳化硅市场份额!英飞凌押注低碳化和数字化“新时代”

“未来十年将是低碳化和数字化‘双轮驱动’发展的时代。” 英飞凌科技全球高级副总裁及大中华区总裁、英飞凌科技大中华区电源与传感系统事业部负责人潘大伟在英飞凌2023年大中华区生态创新峰会上表示。 当前&#xff0c;“数字化低碳化”新趋势正在席卷和重塑着未来世界的千行…

【MySQL】初识数据库

目录 1.概念2.基本使用显示当前的数据库列表创建数据库使用数据库创建表向表中插入数据查看创建的表中的数据 3.SQL的分类4.存储引擎 1.概念 MySQL本质是基于C(mysql)S(mysqld)模式的一种网络服务。 mysqld&#xff1a;它是数据库的服务器端&#xff08;这是一个守护进程&…

SpringBoot代码生成器mapper model

Spring Boot 是一个由 Pivotal 团队提供的全新框架&#xff0c;设计目的是简化新 Spring 应用的初始搭建和开发过程。它采用特定的配置方式&#xff0c;使开发人员能够快速上手并构建基于 Spring 的应用程序。Spring Boot 提供了一套默认配置&#xff0c;包括 Spring、Spring M…

Mathtype公式自动转Word自带公式

Mathtype公式自动转Word自带公式 前言/word技巧探索过程参考资料&#xff08;有效与无效&#xff09;全自动方案/代码/教程 前言/word技巧 word公式 用ALT号可以输入简单latex显示公式&#xff1b;复杂度&#xff0c;需要引入latex包的不行&#xff1b;显示不出来的话按一下en…

C++ PCL点云配准源码实例

程序示例精选 C PCL点云配准源码实例 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《C PCL点云配准源码实例》编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与应用…

MATLAB中plot函数用法

目录 语法 说明 向量和矩阵数据 表数据 其他选项 示例 创建线图 绘制多个线条 根据矩阵创建线图 指定线型 指定线型、颜色和标记 在特定的数据点显示标记 指定线宽、标记大小和标记颜色 添加标题和轴标签 绘制持续时间并指定刻度格式 基于表绘制坐标 在一个轴…

vue,react虚拟dom

Virtual DOM 前言 在传统的Web开发中&#xff0c;直接操作真实的DOM通常是一个昂贵且低效的操作。为了解决这个问题&#xff0c;Virtual DOM&#xff08;虚拟DOM&#xff09;被引入为一个中间层&#xff0c;允许开发者在内存中进行操作&#xff0c;从而避免频繁且不必要的真实D…

MATLAB中Arrow 属性说明

目录 颜色和样式 位置 Arrow 属性是箭头的外观和行为。 Arrow 属性控制 Arrow 对象的外观和行为。通过更改属性值&#xff0c;可以修改箭头的特定方面。使用圆点表示法查询和设置属性。 ar annotation("arrow"); c ar.Color; ar.Color "red"; 颜色和…

下一批就是外包机器视觉公司兄弟们,机器视觉兄弟们可能还不知道,日结,灵活就业的兄弟们正在连夜找工作!

下一批就是外包机器视觉公司兄弟们&#xff0c;机器视觉兄弟们可能还不知道&#xff0c;日结&#xff0c;灵活就业的兄弟们正在连夜找工作&#xff01; 怀念十多年前打工的时候&#xff0c;那个人人脸上都有笑容&#xff0c;充满活力&#xff0c;充满希望的年代。 日结的机器视…

【教3妹学编程-算法题】Range 模块

3妹&#xff1a;哈哈哈哈哈哈哈哈 2哥 : 3妹看什么呢&#xff0c;笑的这么开森 3妹&#xff1a;2哥你快来看啊&#xff0c;成都欢乐谷的NPC模仿“唐僧”&#xff0c; 太搞笑了。 2哥 : 哦这个我也看到了&#xff0c;真的是唯妙唯肖&#xff0c;不能说像&#xff0c;只能说一模一…

Python之函数进阶-闭包原理

Python之函数进阶-闭包原理 闭包 自由变量&#xff1a;未在本地作用域中定义的变量&#xff0c;例如定义在内层函数外的外层函数的作用域中的变量闭包&#xff1a;就是一个概念&#xff0c;出现在嵌套函数中&#xff0c;指的是内层函数引用到了外层函数的自由变量&#xff0c…

【算法】牛的旅行(图的直径,floyd算法求最短路)

题目 农民John的农场里有很多牧区&#xff0c;有的路径连接一些特定的牧区。 一片所有连通的牧区称为一个牧场。 但是就目前而言&#xff0c;你能看到至少有两个牧区不连通。 现在&#xff0c;John想在农场里添加一条路径&#xff08;注意&#xff0c;恰好一条&#xff09;。 一…

基于JavaWeb+SSM+Vue校内校园二手交易微信小程序系统的设计和实现

基于JavaWebSSMVue校内校园二手交易微信小程序系统的设计和实现 源码传送入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应…

vmware配置固定ip

1.在vmware中选择编辑-->虚拟网络编辑器。 1.1按下面1&#xff0c;2&#xff0c;3顺序操作&#xff0c;分别修改子网IP:192.168.5.0&#xff0c;子网掩码:255.255.255.0,这里的子网ip为什么是192.168.5.0呢&#xff0c;因为物理机器的关网是192.168.5.1&#xff0c;见物理机…

creo6.0教程之拉伸

目录 一、实体拉伸&#xff1a;1.拉伸基本操作&#xff1a;2.其他常用的拉伸选项&#xff1a;3.移除材料的拉伸&#xff1a; 一、实体拉伸&#xff1a; 1.拉伸基本操作&#xff1a; 1、点击-拉伸&#xff0c;进入拉伸操作界面 2、选择绘制草图放置的平面&#xff0c;选择放置…

回收站清空了怎么恢复?数据恢复的 6 种方法

众所周知&#xff0c;计算机中的回收站是一个存储空间&#xff0c;用于存储从计算机系统中删除的所有文件、文件夹或数据。它是大多数计算机系统&#xff08;包括Windows、Mac等&#xff09;上的必备功能。当从计算机中删除文件或文件夹时&#xff0c;它会在回收站中存储指定的…

最全面的软考架构师复习资料(历时2年整理)

一、面向服务的架构 1.请分别用200字以内文字说明什么是面向服务架构&#xff08;SOA&#xff09;以及ESB在SOA的作用与特点 面向服务的体系架构&#xff08;SOA&#xff09;是一种粗粒度、松耦合的服务架构&#xff0c;服务之间通过简单、精确定义接口进行通信。他可以根据需求…

C/C++ 动态内存管理(内存是如何分布的?malloc/new,free/delete的用法是什么?区别是什么?)

目录 一、前言 二、C/C中的内存分布 &#x1f4a6;了解内存区域的划分 &#x1f4a6;内存存储区域的对比和注意点 &#x1f4a6;内存管理的常考面试题 三、C语言的动态管理方式 四、C的动态管理方式 &#x1f4a6;new / delete 操作内置类型&#xff08;int,char.....&…