力扣第122题:买卖股票的最佳时机 II

力扣第122题:买卖股票的最佳时机 II - C语言解法

题目描述

给定一个数组 prices,其中 prices[i] 是一支股票第 i 天的价格。你可以多次买入和卖出股票,求能够获得的最大利润。

注意

  • 你不能同时参与多笔交易(即必须在再次买入前出售掉之前的股票)。
  • 在任何一天,你都可以选择不进行任何操作。

示例 1

输入:[7,1,5,3,6,4]
输出:7
解释:在第2天(股票价格 = 1)买入,在第3天(股票价格 = 5)卖出,最大利润 = 5 - 1 = 4。
接着,在第4天(股票价格 = 3)买入,在第5天(股票价格 = 6)卖出,最大利润 = 6 - 3 = 3。
所以最大利润 = 4 + 3 = 7。

示例 2

输入:[1,2,3,4,5]
输出:4
解释:在第1天(股票价格 = 1)买入,在第5天(股票价格 = 5)卖出,最大利润 = 5 - 1 = 4。

示例 3

输入:[7,6,4,3,1]
输出:0
解释:在这种情况下, 不进行交易也可以获得最大利润,返回 0。

解题思路

1. 贪心算法

在这道题中,我们允许在多天进行买卖操作,因此我们可以采用 贪心算法 来解决问题。关键是要捕捉到所有能够获得利润的买卖机会。

交易规则
  • 如果当前股价比昨天的股价高,我们就可以在昨天买入,在今天卖出。也就是说,当前股价大于前一天的股价时,就进行卖出交易,累积利润。
  • 反之,如果今天的股价比昨天低,则我们不进行任何交易。
解题思路
  1. 我们遍历整个股价数组,对于每一天的价格,如果今天的价格高于昨天的价格,那么就进行交易(即把利润加上今天的价格和昨天的价格的差)。
  2. 最终累积的利润就是最大利润。

2. 时间复杂度

  • 时间复杂度 O ( n ) O(n) O(n),我们只需要遍历一次股价数组,其中 n n n 是股票价格数组的长度。
  • 空间复杂度 O ( 1 ) O(1) O(1),我们只需要常数空间来存储当前的利润。

C语言代码实现

#include <stdio.h>
#include <stdlib.h>

int maxProfit(int* prices, int pricesSize) {
    if (pricesSize == 0) return 0;  // 如果没有价格,最大利润为 0

    int max_profit = 0;

    // 遍历价格数组,找出所有的买入卖出机会
    for (int i = 1; i < pricesSize; i++) {
        // 如果今天的价格比昨天的价格高,就进行交易(卖出)
        if (prices[i] > prices[i - 1]) {
            max_profit += prices[i] - prices[i - 1];
        }
    }

    return max_profit;
}

int main() {
    // 示例1
    int prices1[] = {7, 1, 5, 3, 6, 4};
    int size1 = sizeof(prices1) / sizeof(prices1[0]);
    printf("最大利润:%d\n", maxProfit(prices1, size1));  // 输出:7

    // 示例2
    int prices2[] = {1, 2, 3, 4, 5};
    int size2 = sizeof(prices2) / sizeof(prices2[0]);
    printf("最大利润:%d\n", maxProfit(prices2, size2));  // 输出:4

    // 示例3
    int prices3[] = {7, 6, 4, 3, 1};
    int size3 = sizeof(prices3) / sizeof(prices3[0]);
    printf("最大利润:%d\n", maxProfit(prices3, size3));  // 输出:0

    return 0;
}

代码解析

1. maxProfit 函数

int maxProfit(int* prices, int pricesSize) {
    if (pricesSize == 0) return 0;  // 如果没有价格,最大利润为 0

    int max_profit = 0;

    // 遍历价格数组,找出所有的买入卖出机会
    for (int i = 1; i < pricesSize; i++) {
        // 如果今天的价格比昨天的价格高,就进行交易(卖出)
        if (prices[i] > prices[i - 1]) {
            max_profit += prices[i] - prices[i - 1];
        }
    }

    return max_profit;
}
  • maxProfit:该函数通过遍历股价数组,找出所有的买入卖出机会。如果今天的股价比昨天的股价高,则认为今天是一个卖出的时机,并将差价加入 max_profit 中。最后返回最大利润。

  • 贪心算法:我们每次遇到价格上升的情况,就进行交易。这样确保我们最大化每次的利润。

2. main 函数

int main() {
    // 示例1
    int prices1[] = {7, 1, 5, 3, 6, 4};
    int size1 = sizeof(prices1) / sizeof(prices1[0]);
    printf("最大利润:%d\n", maxProfit(prices1, size1));  // 输出:7

    // 示例2
    int prices2[] = {1, 2, 3, 4, 5};
    int size2 = sizeof(prices2) / sizeof(prices2[0]);
    printf("最大利润:%d\n", maxProfit(prices2, size2));  // 输出:4

    // 示例3
    int prices3[] = {7, 6, 4, 3, 1};
    int size3 = sizeof(prices3) / sizeof(prices3[0]);
    printf("最大利润:%d\n", maxProfit(prices3, size3));  // 输出:0

    return 0;
}
  • 输入数据:我们提供了三个示例,分别对应不同的股价数组。
  • 输出结果:通过调用 maxProfit 函数,我们计算并打印出最大利润。

示例输出

最大利润:7
最大利润:4
最大利润:0

总结

本题的解法采用了 贪心算法,通过遍历股价数组,找出所有能够获得利润的买卖机会。每当股价上涨时,我们就进行卖出,并累积利润。最终,我们得到了最大利润。时间复杂度为 O ( n ) O(n) O(n),空间复杂度为 O ( 1 ) O(1) O(1),是一个高效的解法。

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

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

相关文章

在 React 项目中安装和配置 Three.js

React 与 Three.js 的结合 &#xff1a;通过 React 管理组件化结构和应用逻辑&#xff0c;利用 Three.js 实现 3D 图形的渲染与交互。使用这种方法&#xff0c;我们可以在保持代码清晰和结构化的同时&#xff0c;实现令人惊叹的 3D 效果。 在本文中&#xff0c;我们将以一个简…

TCP 为什么采用三次握手和四次挥手以及 TCP 和 UDP 的区别

1. TCP 为什么采用三次握手和四次挥手 采用三次握手的原因&#xff1a; 确认双方的收发能力。第一次握手&#xff0c;客户端发送 SYN 报文&#xff0c;告诉服务器自身具备发送数据的能力&#xff0c;第二次握手&#xff0c;服务器回应 SYN ACK 报文&#xff0c;表名自己既能…

HarmonyOS NEXT 实战之元服务:静态案例效果---手机查看电量

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1完整代码案例如下&#xff1a; import { authentication } …

机器学习之KNN算法预测数据和数据可视化

机器学习及KNN算法 目录 机器学习及KNN算法机器学习基本概念概念理解步骤为什么要学习机器学习需要准备的库 KNN算法概念算法导入常用距离公式算法优缺点优点&#xff1a;缺点︰ 数据可视化二维界面三维界面 KNeighborsClassifier 和KNeighborsRegressor理解查看KNeighborsRegr…

无需配置设备,借助GitHub快速编译项目并直接运行!

引言 你是否曾经有过类似的烦恼&#xff0c;发现了一个有趣的项目&#xff0c;想要测试一下&#xff0c;但是自己的设备没有对应的开发环境或者受制于自己的设备&#xff0c;不想或者不能去配置对应的开发环境&#xff0c;应该怎么办呢&#xff1f;这种情况下&#xff0c;其实…

【C++11】类型分类、引用折叠、完美转发

目录 一、类型分类 二、引用折叠 三、完美转发 一、类型分类 C11以后&#xff0c;进一步对类型进行了划分&#xff0c;右值被划分纯右值(pure value&#xff0c;简称prvalue)和将亡值 (expiring value&#xff0c;简称xvalue)。 纯右值是指那些字面值常量或求值结果相当于…

k-Means聚类算法 HNUST【数据分析技术】(2025)

1.理论知识 K-means算法&#xff0c;又称为k均值算法。K-means算法中的k表示的是聚类为k个簇&#xff0c;means代表取每一个聚类中数据值的均值作为该簇的中心&#xff0c;或者称为质心&#xff0c;即用每一个的类的质心对该簇进行描述。K-Means算法接受参数K&#xff1b;然后将…

阿里云redis内存优化——PCP数据清理

在阿里云安装了一个redis节点&#xff0c;今天使用时忽然想着点击了一下分析内存。好家伙&#xff0c;居然崩出了一个30多M的块出来。问题是我本地安装的redis没有这个啊&#xff0c;怎么奇怪冒出这个来了。 本着把系统用干榨尽的态度&#xff0c;研究了下这个问题的来源。网上…

Java开发-后端请求成功,前端显示失败

文章目录 报错解决方案1. 后端未配置跨域支持2. 后端响应的 Content-Type 或 CORS 配置问题3. 前端 request 配置问题4. 浏览器缓存或代理问题5. 后端端口未被正确映射 报错 如下图&#xff0c;后端显示请求成功&#xff0c;前端显示失败 解决方案 1. 后端未配置跨域支持 …

MarkItDown的使用(将Word、Excel、PDF等转换为Markdown格式)

MarkItDown的使用&#xff08;将Word、Excel、PDF等转换为Markdown格式&#xff09; 本文目录&#xff1a; 零、时光宝盒&#x1f33b; 一、简介 二、安装 三、使用方法 3.1、使用命令行形式 3.2、用 Python 调用 四、总结 五、参考资料 零、时光宝盒&#x1f33b; &a…

akamai3.0 wizzair 网站 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我删…

kubernetes Gateway API-1-部署和基础配置

文章目录 1 部署2 最简单的 Gateway3 基于主机名和请求头4 重定向 Redirects4.1 HTTP-to-HTTPS 重定向4.2 路径重定向4.2.1 ReplaceFullPath 替换完整路径4.2.2 ReplacePrefixMatch 替换路径前缀5 重写 Rewrites5.1 重写 主机名5.2 重写 路径5.2.1 重新完整路径5.2.1 重新部分路…

likeAdmin架构部署(踩坑后的部署流程

1、gitee下载 https://gitee.com/likeadmin/likeadmin_java.git 自己克隆 2、项目注意 Maven&#xff1a;>3.8 ❤️.9 (最好不要3.9已经试过失败 node &#xff1a;node14 (不能是18 已经测试过包打不上去使用14的换源即可 JDK&#xff1a;JDK8 node 需要换源 npm c…

宠物行业的出路:在爱与陪伴中寻找增长新机遇

在当下的消费市场中&#xff0c;如果说有什么领域能够逆势而上&#xff0c;宠物行业无疑是一个亮点。当人们越来越注重生活品质和精神寄托时&#xff0c;宠物成为了许多人的重要伴侣。它们不仅仅是家庭的一员&#xff0c;更是情感的寄托和生活的调剂。然而&#xff0c;随着行业…

Java 堆排序原理 图文详解 代码逻辑

文章目录 1. 时间复杂度 & 空间复杂度2. 大顶堆、小顶堆3. 具体步骤 & 原理1. 判断是否满足堆的性质2. 维护堆的性质3. 交换位置 4. 代码实现 1. 时间复杂度 & 空间复杂度 时间复杂度: O(nlogn) 建堆时间复杂度: O(n) 排序时间复杂度: O(nlogn)空间复杂度: O(1) …

计算机网络|数据流向剖析与分层模型详解

文章目录 一、网络中的数据流向二、计算机网络通信模型1.OSI 模型2.TCP/IP 模型3.TCP/IP五层模型3.1 分层架构描述3.2各层地址结构3.3UDP数据包报头结构 三、总结 一、网络中的数据流向 在计算机网络中&#xff0c;数据的流向是指数据从发送端到接收端的传输路径。数据流向涉及…

ensp、HCL环境部署vm版

ensp、HCL环境部署vm版 前言部署环境vmware安装下载镜像创建虚拟机安装ensp、HCL创建快照 问题此平台不支持虚拟化的 AMD-V/rvi。 前言 因为我换了电脑&#xff0c;锐龙版的win11&#xff0c;我按照以前的思路去装软件&#xff0c;发现有很多问题&#xff0c;特别是跳hyper-v弹…

鸿蒙项目云捐助第二十九讲云捐助项目云数据库商品的批量增加功能实现

鸿蒙项目云捐助第二十九讲云捐助项目云数据库商品的批量增加功能实现 关于鸿蒙云捐助项目&#xff0c;前面的内容已使用云函数&#xff0c;云数据库分别实现云捐助项目首页中的项分类导航&#xff0c;底部导航&#xff0c;轮播图功能&#xff0c;这里继续实现云数据库加载捐赠…

【LeetCode: 83. 删除排序链表中的重复元素 + 链表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Spring源码_05_IOC容器启动细节

前面几章&#xff0c;大致讲了Spring的IOC容器的大致过程和原理&#xff0c;以及重要的容器和beanFactory的继承关系&#xff0c;为后续这些细节挖掘提供一点理解基础。掌握总体脉络是必要的&#xff0c;接下来的每一章都是从总体脉络中&#xff0c; 去研究之前没看的一些重要…