贪心算法—股票交易时机Ⅱ

news2024/9/26 3:23:00

在此前我们已经介绍过贪心算法以及股票交易时机Ⅰ,有需要的话可以移步至贪心算法_Yuan_Source的博客-CSDN博客

题目介绍

122. 买卖股票的最佳时机 II - 力扣(LeetCode)

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。

在每一天,你可以决定是否购买和/或出售股票。你在任何时候最多只能持有一股股票。你也可以先购买,然后在 同一天 出售。返回你能获得的最大利润 。

示例 1:

输入:prices = [7,1,5,3,6,4,3]
输出:7

由上面的示例我们可以看出,我们要去计算的实际上就是在折线图中呈增长趋势的增长的总值。

我们可以提出解法一:双指针法

实现原理如下:

  1. 初始化两个变量prevcur,分别表示当前子数组的起始位置和结束位置。
  2. 初始化一个变量sum,用于存储最大利润。
  3. 使用一个while循环遍历股票价格数组。
  4. 在循环中,首先检查cur是否等于股票价格数组的长度减1,如果是,则将prices[cur] - prices[prev]加到sum中,并跳出循环。
  5. 如果cur不等于股票价格数组的长度减1,则检查prices[cur + 1]是否大于prices[cur]。如果是,则将cur加1,否则执行以下操作: a. 将prices[cur] - prices[prev]加到sum中。 b. 将cur加1,并将prev更新为cur
  6. 循环结束后,返回sum

注意事项:

  1. 代码中使用了两个变量prevcur来表示当前子数组的起始位置和结束位置。在循环中,当prices[cur + 1]小于等于prices[cur]时,将prices[cur] - prices[prev]加到sum中,并将cur加1,将prev更新为cur。这样做的目的是为了计算出股票价格数组中所有可能的子数组的最大值之差,并找到最大值。
  2. 代码中使用了while循环来遍历股票价格数组,直到cur等于股票价格数组的长度减1。在循环中,首先检查cur是否等于股票价格数组的长度减1,如果是,则将prices[cur] - prices[prev]加到sum中,并跳出循环。然后检查prices[cur + 1]是否大于prices[cur],如果是,则将cur加1,否则执行上述操作。这样做的目的是为了计算出股票价格数组中所有可能的子数组的最大值之差,并找到最大值。
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int prev = 0, cur = 0;
        int sum = 0;
        while (cur < prices.size()) {
            if (cur == prices.size() - 1) {
                sum += prices[cur] - prices[prev];
                break;
            }
            if (prices[cur + 1] > prices[cur]) {
                cur++;
            } else {
                sum += prices[cur] - prices[prev];
                cur++;
                prev = cur;
            }
        }
        return sum;
    }
};

解法二:贪心

实现原理:

  1. 首先检查输入数组是否为空,如果为空则返回0。
  2. 初始化一个名为sum的变量,用于存储累计利润。
  3. 使用一个for循环遍历数组,从第一个元素到倒数第二个元素。
  4. 在循环中,检查当前元素(prices[i])和下一个元素(prices[i + 1])的大小关系。
  5. 如果prices[i + 1]大于prices[i],说明当前股票价格较低,可以买入。将prices[i + 1] - prices[i]累加到sum中,表示这次买入的利润。
  6. 循环结束后,返回sum作为最终结果。
class Solution {  
public:  
    int maxProfit(vector<int>& prices) {  
        // 如果价格数组为空,则无法进行交易,直接返回0  
        if (prices.empty())  
            return 0;  
          
        int sum = 0; // 初始化总利润为0  
          
        // 遍历价格数组,除了最后一天(因为我们需要比较相邻两天的价格)  
        for (int i = 0; i < prices.size()-1; i++) {  
            // 如果后一天的价格高于前一天,则进行交易并累加利润  
            if(prices[i+1] > prices[i]){  
                sum += prices[i+1] - prices[i];  
            }  
            // 如果后一天的价格不高于前一天,则不进行交易,继续遍历  
        }  
          
        // 返回累计的总利润  
        return sum;  
    }  
};

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

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

相关文章

【Linux】问题解决:yum repolist出现“!”号

问题描述&#xff1a;在运行 yum repolist 时&#xff0c;出现以下状况&#xff1a; 原因&#xff1a;表示仓库里有过期的元数据&#xff0c;并不是最新版本。 解决方法&#xff1a; 清楚过期缓存 yum clean all 快速创建新yum缓存 yum makecache fast 结果&#xff1a;…

Qt——QTCreater ui界面如何统一设置字体

第一步&#xff1a;来到 ui 设计界面&#xff0c;鼠标右键点击 改变样式表 第二步&#xff1a;选择添加字体 第三步&#xff1a;选择字体样式和大小&#xff0c;点击 ok 第四步&#xff1a;点击ok或apply&#xff0c;完成设置

基于100G-PAM4技术的LinkX 线缆

LinkX线缆专注于加速数据中心和人工智能计算系统&#xff0c;这些产品不仅提供了高数据传输速率&#xff0c;还在设计上特别优化了低延迟性能&#xff0c;以满足现代计算系统对速度和效率的高要求。 一、主要特点与技术规格 1、传输距离与速率 数据中心应用&#xff1a;支持…

用 Bytebase 实现批量、多环境、多租户数据库的丝滑变更

Bytebase 提供了多种功能来简化批量变更管理&#xff0c;适用于多环境或多租户情况。本教程将指导您如何使用 部署配置 和 数据库组 在不同场景下进行数据库批量变更。 默认流水线 vs 部署配置 图片数据库 vs 数据库组 1. 准备 请确保已安装 Docker&#xff0c;如果本地没有重…

Ubuntu 24.04 LTS Noble安装OpenSSH服务器

OpenSSH 服务器在 Ubuntu Linux 上提供安全外壳 ( SSH) 协议&#xff0c;以便远程管理系统&#xff0c;同时提供高级别的加密&#xff0c;确保安全。虽然许多 Linux 系统默认配备 OpenSSH 服务器&#xff0c;但在 Ubuntu 24.04 上&#xff0c;我们必须手动安装它。因此&#x…

新版Next.js 15中5个令人惊叹的特性

前端岗位内推来了 Next.js 15已经到来&#xff0c;一切比以往更好&#xff01; 从全新的编译器到700倍更快的构建时间&#xff0c;创建具有卓越性能的全栈Web应用从未如此简单。 让我们探索v15的最新特性&#xff1a; 1. create-next-app升级&#xff1a;更清晰的UI&#xff0c…

【Spring Boot】手撕搜索引擎项目,深度复盘在开发中的重难点和总结(长达两万6千字的干货,系好安全带,要发车了......)

目录 搜索引擎搜索引擎的核心思路 一、解析模块1.1 枚举所有文件1.2 解析每个文件的标题&#xff0c;URL以及正文1.2.1 解析标题1.2.2 解析URL1.2.3 解析正文 1.3 线程池优化代码 二 、创建排序模块2.1 构建正排索引2.2 构建倒排索引2.3 序列化2.4 反序列化 三、搜索模块3.1 引…

CTF web cookie考题

CTF web cookie考题 题目名称&#xff1a;cookie 题目名称&#xff1a;cookie 1.进入服务器界面 &#xff1a; 2.打开 浏览器内 ——>开发者工具 网络 查看 或按F12 3. 根据自己服务器地址 后缀加入\cookie.php 进入查看 4.进入cookie.php文件 点击文件查看 5.找出flag

2023华为OD面试手撕代码经验分享

我们先来看下这个同学的面试经历吧&#xff0c;非常有借鉴的意义。 【22届考研渣渣的od求职之旅&#xff0c;推荐一下两个人&#xff0c;德科hr和牛客的老哥】 "*********"&#xff0c;hr给了机会吧&#xff0c;一开始我都没想到od这边。 还有我关注里面的老哥&#…

postgresql启动故障【已解决】

故障原因 暂时未知&#xff0c;电脑重启后postgresql无法正常运行&#xff0c;尝试重启遇到如下错误 本地计算机 上的 postgresql-x64-12 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。 排查过程 查看系统日志&#xff0c;发现pid已存在【计算机管理——…

sqli-labs-master less1-less6

目录 通关前必看 1、判断是否存在sql注入以及是字符型还是数值型&#xff1a; 2、各种注入方式以及方法 有回显型&#xff1a; 报错注入&#xff08;只有ok和no的提示以及报错提示&#xff09;&#xff1a; 详细思路&#xff0c;后面的题都可以这样去思考 关卡实操 less…

vue2中使用jsx基础

1、基本的模板 <script lang"jsx"> export default {name: demo1,// 数据定义data() {return {info: {age: 18,}}},created() {},methods: {},render() {return (<div><div>我是小明&#xff0c;今年{this.info.age}</div></div>)} }…

逐行重现 GPT-2:第 2 部分 - 硬件优化

Andrej Karpathy 的“让我们重现 GPT-2 (124M)”第 2 部分中的硬件优化 欢迎来到雲闪世界。为了撰写这篇博文&#xff0c;我在 Google Colab 免费提供的 NVIDIA T4 GPU 和 Lambda Labs 的 NVIDIA A100 GPU 40GB SXM4 上都进行了优化。Karpathy 介绍的大多数优化都是针对 A100 或…

MES系统在数字化转型中的核心作用与影响

数字化转型是企业利用数字技术改变其业务模式、运营方式、组织结构、产品服务等方面的过程&#xff0c;旨在提高效率、降低成本、增强竞争力并实现可持续发展。数字化转型涉及多个层面&#xff0c;主要包括以下几个方面&#xff1a; 数字化转型转什么 转战略&#xff1a;由构…

VLC实现视频文件转RTSP流

1.选择本地文件 2.创建流 现在已经开始推流了&#xff1a; 3.播放上面创建的流 访问地址&#xff1a;rtsp://:8554/test111

OJ-0802

题目 分析 要点&#xff1a;在排队的基础上移动学生位置&#xff0c;实现要求的分组&#xff0c;分组的顺序不做要求&#xff0c;求移动学生次数的最小值。 实现方案&#xff1a;考虑Map 参考 解题思路&#xff1a; 1.建立索引字典:将学生目前排队情况转换成索引字典,其中键…

使用Git管理ECAD软件元器件库

在日常工作中&#xff0c;很多工程师习惯维护和使用自己的元器件库&#xff0c;这样可以方便的查找和使用元器件。但是&#xff0c;如果元器件库中的元器件数量较多&#xff0c;且元器件的版本较多&#xff0c;那么维护元器件库就会变得非常困难。还有&#xff0c;企业中的研发…

基于JAVA的进销存管理系统的设计与实现

点击下载源码 基于JAVA的进销存管理系统的设计与实现 摘 要 进入21世纪以来&#xff0c;商业管理中需要处理的数据和信息越来越多。大量的数据和繁杂的数据使得古老的手工处理数据的方式渐渐显得力不从心。甚至有些信息处理的方式在手工处理的模式下是根本无法是实现的&…

ggplot2 添加文字信息,设置黑体、斜体、旋转、对齐

目的&#xff1a;图中添加文字。 1. 每个点都添加文字 效果不好。 保持文字颜色和点一致&#xff0c;就没法斜体。 设置斜体&#xff0c;就没法保持文字颜色。 library(ggplot2) p1ggplot(iris, aes(Sepal.Length, Sepal.Width, colorSpecies))geom_point(size1.5)theme_cl…

HarmonyOS入门

HarmonyOS 系统定义 HarmonyOS 是一款面向万物互联时代的、全新的分布式操作系统。 Harmony提出了基于同一套系统能力、适配多种终端形态的分布式理念&#xff0c;能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设置&#xff0c;提供全场景&#xff08;移动办公、运动…