力扣第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. 贪心算法
在这道题中,我们允许在多天进行买卖操作,因此我们可以采用 贪心算法 来解决问题。关键是要捕捉到所有能够获得利润的买卖机会。
交易规则
- 如果当前股价比昨天的股价高,我们就可以在昨天买入,在今天卖出。也就是说,当前股价大于前一天的股价时,就进行卖出交易,累积利润。
- 反之,如果今天的股价比昨天低,则我们不进行任何交易。
解题思路
- 我们遍历整个股价数组,对于每一天的价格,如果今天的价格高于昨天的价格,那么就进行交易(即把利润加上今天的价格和昨天的价格的差)。
- 最终累积的利润就是最大利润。
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; // 如果没有价格,最大利润为 0int 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() {// 示例1int prices1[] = {7, 1, 5, 3, 6, 4};int size1 = sizeof(prices1) / sizeof(prices1[0]);printf("最大利润:%d\n", maxProfit(prices1, size1)); // 输出:7// 示例2int prices2[] = {1, 2, 3, 4, 5};int size2 = sizeof(prices2) / sizeof(prices2[0]);printf("最大利润:%d\n", maxProfit(prices2, size2)); // 输出:4// 示例3int prices3[] = {7, 6, 4, 3, 1};int size3 = sizeof(prices3) / sizeof(prices3[0]);printf("最大利润:%d\n", maxProfit(prices3, size3)); // 输出:0return 0;
}
代码解析
1. maxProfit
函数
int maxProfit(int* prices, int pricesSize) {if (pricesSize == 0) return 0; // 如果没有价格,最大利润为 0int 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() {// 示例1int prices1[] = {7, 1, 5, 3, 6, 4};int size1 = sizeof(prices1) / sizeof(prices1[0]);printf("最大利润:%d\n", maxProfit(prices1, size1)); // 输出:7// 示例2int prices2[] = {1, 2, 3, 4, 5};int size2 = sizeof(prices2) / sizeof(prices2[0]);printf("最大利润:%d\n", maxProfit(prices2, size2)); // 输出:4// 示例3int prices3[] = {7, 6, 4, 3, 1};int size3 = sizeof(prices3) / sizeof(prices3[0]);printf("最大利润:%d\n", maxProfit(prices3, size3)); // 输出:0return 0;
}
- 输入数据:我们提供了三个示例,分别对应不同的股价数组。
- 输出结果:通过调用
maxProfit
函数,我们计算并打印出最大利润。
示例输出
最大利润:7
最大利润:4
最大利润:0
总结
本题的解法采用了 贪心算法,通过遍历股价数组,找出所有能够获得利润的买卖机会。每当股价上涨时,我们就进行卖出,并累积利润。最终,我们得到了最大利润。时间复杂度为 O ( n ) O(n) O(n),空间复杂度为 O ( 1 ) O(1) O(1),是一个高效的解法。
相关文章:
力扣第122题:买卖股票的最佳时机 II
力扣第122题:买卖股票的最佳时机 II - C语言解法 题目描述 给定一个数组 prices,其中 prices[i] 是一支股票第 i 天的价格。你可以多次买入和卖出股票,求能够获得的最大利润。 注意: 你不能同时参与多笔交易(即必须…...
【Spring MVC】第一站:Spring MVC介绍配置基本原理
目录 1.引入 2. Java web的发展史 Model I 和Model II 3. MVC模式 4. Spring MVC配置 5. SpringMVC原理 5.1 SpringMVC中心控制器 6. Maven配置 1.引入 $$ Spring与Spring MVC的区别 SSM 包含三部分: Spring MVCSpringMybatis SSM就是升级版的Servlet。 Servlet…...
密钥登录服务器
1. 生成 SSH 密钥对 如果您还没有生成密钥对,可以使用以下命令生成: ssh-keygen 在 root 用户的家目录中生成了一个 .ssh 的隐藏目录,内含两个密钥文件:id_rsa 为私钥,id_rsa.pub 为公钥。 在提示时,您可…...
Java中StopWatch的使用详解
stopWatch 是org.springframework.util 包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比。 在未使用这个工具类之前,如果我们需要统计某段代码的耗时,我们会这样写: public static void main(String[] args…...
安全运营 -- splunk restapi 最小权限
0x00 背景 最小化权限原则,为每个功能,每个账户分配最小的权限。 0x01 实践 只需要7个 capability: Youll need to add certain capabilities to that user or that userss role(s).[capability::rest_apps_management] * Lets a user edit settings …...
12. 日常算法
1. 主持人调度(一) 题目来源 class Solution { public:bool hostschedule(vector<vector<int>>& schedule) {// write code heresort(schedule.begin(), schedule.end());int start -1, end 0;for (auto & nums : schedule){end…...
运行Zr.Admin项目(后端)
1.下载Zr.Admin代码压缩包 https://codeload.github.com/izhaorui/Zr.Admin.NET/zip/refs/heads/main 2.打开项目 我这里装的是VS2022社区版 进入根目录,双击ZRAdmin.sln打开项目 3.安装.net7运行时 我当时下载的代码版本是.net7的 点击安装 点击安装࿰…...
CSS(二):美化网页元素
目录 字体样式 文本样式 列表样式 背景图片 字体样式 字体相关的 CSS 属性: font-family:设置字体font-size:设置字体大小font-weight:设置字体的粗细(如 normal, bold, lighter 等)color:…...
如何不让场景UI受后处理影响
1)如何不让场景UI受后处理影响 2)Sprite打入SpriteAtlasv2依赖丢失 3)如何为Render Texture模式的videoPlayer生成封面 4)如何排查Shader变体的SRP Batcher兼容性 这是第415篇UWA技术知识分享的推送,精选了UWA社区的热…...
【教程】通过Docker运行AnythingLLM
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 官方教程:Local Docker Installation ~ AnythingLLM 1、先创建一个目录用于保存anythingllm的持久化文件: sudo mkdir /app su…...
2024/12/29 黄冈师范学院计算机学院网络工程《路由期末复习作业一》
一、选择题 1.某公司为其一些远程小站点预留了网段 172.29.100.0/26,每一个站点有10个IP设备接到网络,下面那个VLSM掩码能够为该需求提供最小数量的主机数目 ( ) A./27 B./28 C./29 D./30 -首先审题我们需要搞清楚站点与网…...
LeetCode-整数反转(007)
一.题目描述 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 二.示例 …...
碰一碰发视频矩阵系统源码搭建,支持OEM
一、引言 随着短视频的火爆发展,碰一碰发视频的矩阵系统逐渐受到关注。这种系统能够实现用户通过碰一碰设备(如 NFC 标签)快速触发视频的发布,在营销推广、互动体验等领域有着广泛的应用前景。本文将详细介绍碰一碰发视频矩阵系统…...
Linux网络编程3——多线程编程(改良版)
一.多线程 1.什么是线程 要了解线程,首先需要知道进程。一个进程指的是一个正在执行的应用程序。线程对应的英文名称为“thread”,它的功能是执行应用程序中的某个具体任务,比如一段程序、一个函数等。 线程和进程之间的关系,类…...
LeetCode每日三题(六)数组
一、最大子数组和 自己答案: class Solution {public int maxSubArray(int[] nums) {int begin0;int end0;if(numsnull){//如果数组非空return 0;}else if(nums.length1){//如果数组只有一个元素return nums[0];}//初值选为数组的第一个值int resultnums[0];int i…...
安装了python,环境变量也设置了,但是输入python不报错也没反应是为什么?window的锅!
目录 问题 结论总结 衍生问题 1 第1步:小白python安装,不要埋头一直点下一步!!! 2 第2步:可以选择删了之前的,重新安装python 3 第3步:如果你不想或不能删了重装python&#…...
Vue.js组件开发-使用KeepAlive缓存特定组件
在Vue中,<keep-alive> 组件是一个非常有用的工具,可以用来缓存那些不希望每次切换时都重新渲染的组件。要缓存特定组件,可以使用 <keep-alive> 的 include 和 exclude 属性,这两个属性都接受字符串、正则表达式或数组…...
配置hive支持中文注释
hive元数据metastore默认的字符集是latin1,所以中文注释会乱码。但是不能将metastore库的字符集更改为utf-8,只能对特定表、特定列修改为utf-8。配置hive支持中文注释,主要在两个方面: 1、在Hive元数据存储的Mysql数据库中&#…...
Windows配置IE浏览器不自动跳转到Edge
一:使用 IE 浏览器自身设置(部分情况有效) 打开 IE 浏览器设置:启动 IE 浏览器,点击右上角的 “工具”(齿轮形状)图标,选择 “Internet 选项”。设置启动选项:在 “Inte…...
BGP特性实验
实验拓扑 实验需求及解法 本实验模拟大规模BGP网络部署,使用4字节AS号,传递IPv6路由。 预配说明: sysname R1 ospfv3 1router-id 1.1.1.1 # firewall zone Localpriority 15 # interface Serial1/0/0link-protocol pppipv6 enable ipv6 ad…...
【多模态】从零学习多模态——2024学习笔记总结
从零学习多模态——2024学习笔记总结 前言1. preliminary2. Transformer和NLP基础3. 多模态模型原理和架构学习4. 动手实验多模态模型第一步尝试Swift框架使用数据验证 5. 总结 前言 2024快结束啦,半年抽空学了学多模态还挺好玩的,学习和踩坑记录记一下&…...
Meta AI 提出大型概念模型(LCMs):语义超越基于令牌的语言建模
在自然语言处理(Natural Language Processing, NLP)的领域,大型语言模型(Large Language Models, LLMs)已经取得了令人瞩目的成就,它们使得文本生成、摘要和问答等应用成为现实。但是,这些模型依…...
【优先算法】滑动窗口 --(结合例题讲解解题思路)(C++)
目录 编辑 1.什么是滑动窗口? 2. 滑动窗口例题 2.1 例题1:长度最小的子数组 2.1.1 解题思路 2.1.2 方法一:暴力枚举出所有的子数组的和 2.1.3 方法二:使用 “同向双指针” 也就是滑动窗口来进行优化 2.2 例题2:无重…...
Linux下PostgreSQL-12.0安装部署详细步骤
一、安装环境 postgresql-12.0 CentOS-7.6 注意:确认linux系统可以正常连接网络,因为在后面需要添加依赖包。 二、pg数据库安装包下载 下载地址:PostgreSQL: File Browser 选择要安装的版本进行下载: 三、安装依赖包 在要安…...
Delphi历史版本对照及主要版本特性
Delphi编程的关键特性包括: 可视化开发:Delphi以其独特的开发方法而闻名,它允许开发者通过直观的表单设计器来创建用户界面。这种快速应用程序开发(RAD)的方法大大简化并加速了图形用户界面(GUI)…...
java基础知识22 java的反射机制
一 java反射机制 1.1 概述 Java反射,程序在运行时,动态获取类信息(类元数据),获取字段属性,动态创建对象和调用方法。Spring框架正是基于反射机制,通过我们的配置文件,在项目运行时…...
多因子模型连载
多因子模型 (Multi-Factor Model)是量化投资中的一种重要工具,用于解释和预测股票收益。它通过将多个不同的因子(如市值、动量、价值、质量等)结合起来,构建一个综合的模型来评估股票的表现。多因子模型不仅能够捕捉单个因子的影响…...
服务器广播算法
服务器广播算法(Server Broadcasting Algorithm)是一种在分布式系统中用于高效地将信息从一个服务器传播到整个网络的算法。它被广泛用于分布式计算、数据中心、内容分发网络(CDN)和消息队列系统中。以下是常见的服务器广播算法的…...
具身智能 - Vision-language-action models for robot manipulation
具身智能大模型简介_哔哩哔哩_bilibili 受到自然语言处理、计算机视觉领域中基础模型的成功的启发,具身智能领域也在尝试设计、训练、微调大模型来解决现实生活中最普遍存在的机器人操作问题。“Vision-language-action models for robot manipulation”࿰…...
计算机组成原理的学习笔记(12) -- 总线和I/O系统
学习笔记 前言 本文主要是对于b站尚硅谷的计算机组成原理的学习笔记,仅用于学习交流。 总线 1. 组成 总线主要由三种信号线组成: 数据线:用于传输实际的数据,宽度决定了数据传输的并行性。 地址线:传输内存或I/…...
ReactiveStreams、Reactor、SpringWebFlux
注意: 本文内容于 2024-12-28 21:22:12 创建,可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容,请访问原文地址:ReactiveStreams、Reactor、SpringWebFlux。感谢您的关注与支持! ReactiveStreams是…...
【潜意识Java】探寻Java子类构造器的神秘面纱与独特魅力,深度学习子类构造器特点
目录 一、子类构造器的诞生背景 (一)为啥要有子类构造器? (二)子类与父类构造器的关系 二、子类构造器的调用规则 (一)默认调用父类无参构造器 (二)显式调用父类构…...
OpenCV调整图像亮度和对比度
【欢迎关注编码小哥,学习更多实用的编程方法和技巧】 1、基本方法---线性变换 // 亮度和对比度调整 cv::Mat adjustBrightnessContrast(const cv::Mat& src, double alpha, int beta) {cv::Mat dst;src.convertTo(dst, -1, alpha, beta);return dst; }// 使用…...
HarmonyOs DevEco studio小技巧40--应用名称、图标与启动动画修改全攻略
一、引言 随着 HarmonyOS 的日益普及,越来越多的开发者投身于这个充满潜力的生态之中。而 DevEco Studio 作为 HarmonyOS 官方推出的集成开发环境,为开发者提供了一站式的开发体验。在应用开发过程中,一些细节上的设置,如应用名称…...
ESP-IDF学习记录(2)ESP-IDF 扩展的简单使用
傻瓜式记录一个示例的打开,编译,运行。后面我再一个个运行简单分析每个demo的内容。 1.打开示例代码 2.选择项目,文件夹 3.选择串口 4.选择调试方式 5.根据硬件GPIO口配置menuconfig 6.构建项目 7.烧录设备,选择串口UART方式 运行…...
2024 年最新 windows 操作系统搭建部署 nginx 服务器应用详细教程(更新中)
nginx 服务器概述 Nginx 是一款高性能的 HTTP 和 反向代理 服务器,同时是一个 IMAP / POP3 / SMTP 代理服务器。Nginx 凭借其高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。 浏览 nginx 官网:https://nginx.org/ Nginx 应用场景 静态…...
基于ArcGIS Pro的SWAT模型在流域水循环、水生态模拟中的应用及案例分析;SWAT模型安装、运行到结果读取全流程指导
目前,流域水资源和水生态问题逐渐成为制约社会经济和环境可持续发展的重要因素。SWAT模型是一种基于物理机制的分布式流域水文与生态模拟模型,能够对流域的水循环过程、污染物迁移等过程进行精细模拟和量化分析。SWAT模型目前广泛应用于流域水文过程研究…...
Quartz任务调度框架实现任务动态执行
说明:之前使用Quartz,都是写好Job,指定一个时间点,到点执行。最近有个需求,需要根据前端用户设置的时间点去执行,也就是说任务执行的时间点是动态变化的。本文介绍如何用Quartz任务调度框架实现任务动态执行…...
10.MySQL事务
目录 什么是事务为什么有事务存在事务的版本支持事务的提交方式事务常见的操作方式事务异常验证与产出结论事务隔离性理论事务隔离级别的设置与查看事务隔离级别 - 读未提交事务隔离级别 - 读提交事务隔离级别 - 可重复读事务隔离级别 - 串行化MVCC机制3个记录隐藏字段undo日志…...
1.若依介绍
若依框架 好处: 1.快速构建 2.通用模块(登录、权限分配和校验、操作日志功能) 3.代码生成(定义好数据库表的结构,就能自动生成前后端对应的代码) 位置:系统工具-> 代码生成 若依版本 R…...
计算机网络实验室建设方案
一、计算机网络实验室拓扑结构 计算机网络综合实验室解决方案,是面向高校网络相关专业开展教学实训的综合实训基地解决方案。教学实训系统采用 B/S架构,通过公有云教学实训平台在线学习模式,轻松实现网络系统建设与运维技术的教学…...
【Rust自学】6.4. 简单的控制流-if let
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 6.4.1. 什么是if let if let语法允许将if和let组合成一种不太冗长的方式来处理与一种模式匹配的值,同时忽略其余模式。 可以…...
4-1 输出一组成绩中的最高分和最低分
第一行输入人数n,第二行输入每个人的成绩,用空格分开。输出所有成绩中的最高分和最低分。 输入格式: 第一行输入n,大于0的整数;第二行输入n个大于等于0,小于等于100的整数,用空格分开。 输出格式: 最高…...
数据结构:二叉树部分接口(链式)
目录 二叉树的遍历 1.通过前序遍历的数据构造二叉树 2.二叉树销毁 3. 二叉树节点个数 4. 二叉树叶子节点的个数 5.二叉树第k层节点个数 6.二叉树查找值为x的节点 7.二叉树的前/中/后序遍历 8.层序遍历 9.判断二叉树是否是完全二叉树 二叉树的遍历 前序、中序以及后序…...
音视频入门基础:MPEG2-PS专题(1)——MPEG2-PS官方文档下载
一、引言 MPEG2-PS(又称PS,Program Stream,程序流,节目流)是一种多路复用数字音频、视频等的封装容器。MPEG2-PS将一个或多个分组但有共同的时间基准的基本数据流 (PES)合并成一个整体流。它是…...
overleaf中文生僻字显示不正确,显示双线F
我是不想换全文字体的,只是一个生僻字显示不出来,就想要像word一样,把这个生僻字用包含这个生僻字的字体来显示就好了。 解决步骤: 1、使用如下宏包: \usepackage{xeCJK} %声明宏包,主要用于支持在XeTeX…...
代理arp(proxy arp)原理 及配置
openwrt下打开 arp代理方法 proxy arp概念打开方法openwrt下打开 arp代理方法proxy arp概念 定义 Proxy ARP(代理地址解析协议)是一种网络技术,它允许一个设备(通常是路由器)代表另一个设备来回应 ARP(地址解析协议)请求。工作原理 ARP 回顾:在正常的 ARP 过程中,当主…...
torch.tensor
torch.tensor 通过复制数据构造一个张量 (构造出的张量是一个没有自动微分(autograd )历史的张量,也称为叶张量,参考Autograd mechanics)。 torch.tensor(data, *, dtypeNone, deviceNone, requires_gra…...
Lucene 漏洞历险记:修复损坏的索引异常
作者:来自 Elastic Benjamin Trent 有时,一行代码需要几天的时间才能写完。在这里,我们可以看到工程师在多日内调试代码以修复潜在的 Apache Lucene 索引损坏的痛苦。 做好准备 这篇博客与往常不同。它不是对新功能或教程的解释。这是关于花…...
Github优质项目推荐(第十期)
文章目录 Github优质项目推荐(第十期)一、【postiz-app】,14.6k stars - 您的终极 AI 社交媒体调度工具二、【lobe-chat】,50.1k stars - AI 聊天框架三、【cobalt】,22.1k stars - 媒体下载器四、【build-your-own-x】…...