【算法与数据结构】122、LeetCode买卖股票的最佳时机 II

文章目录

  • 一、题目
  • 二、解法
  • 三、完整代码

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。

一、题目

在这里插入图片描述

二、解法

  思路分析:股票要想盈利,必须低买高卖。在第N天买入,然后在第M天卖出,所获的利润是price[M]-price[N],而这个利润公式可以分解成:
p r i c e [ M ] − p r i c e [ N ] = ( p r i c e [ M ] − p r i c e [ M − 1 ] ) + ( p r i c e [ M − 1 ] − p r i c e [ M − 2 ] ) + . . . + ( p r i c e [ N + 2 ] − p r i c e [ N + 1 ] ) + ( p r i c e [ N + 1 ] − p r i c e [ N ] ) \begin{align*} price[M]-price[N]&=(price[M]-price[M-1])+(price[M-1]-price[M-2])+... \\ &+(price[N+2]-price[N+1])+(price[N+1]-price[N]) \end{align*} price[M]price[N]=(price[M]price[M1])+(price[M1]price[M2])+...+(price[N+2]price[N+1])+(price[N+1]price[N])
  即N买M卖的利润可以由M和N天中间的股票价格的差值得到,因此我们去计算price数组后一个元素与前一个元素的差值。取差值数组的和就是最终所得最大利润。
  程序如下

class Solution {
public:int maxProfit(vector<int>& prices) {int result = 0;for (int i = 0; i < prices.size() - 1; i++) {result += max(prices[i + 1] - prices[i], 0);}return result;}
};

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1)

三、完整代码

# include <iostream>
# include <vector>
# include <algorithm>
using namespace std;class Solution {
public:int maxProfit(vector<int>& prices) {int result = 0;for (int i = 0; i < prices.size() - 1; i++) {result += max(prices[i + 1] - prices[i], 0);}return result;}
};int main() {vector<int> prices = { 7,1,5,3,6,4 };Solution s1;int result = s1.maxProfit(prices);cout << result << endl;system("pause");return 0;
}

end

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java的数据类型

文章目录 整形浮点型字符型布尔型基本数据类型转换自动类型转换自动类型转换注意和细节强制类型转换强制类型转换细节说明 整形 浮点型 字符型 字符型使用细节 布尔型 基本数据类型转换 自动类型转换 自动类型转换注意和细节 强制类型转换 自动类型转换的逆过程&#x…

安全生产隐患排查治理信息化系统软件

安全隐患排查系统实现对重大危险源企业、安全隐患信息的登记、整改、复查、分类和统计。系统涵盖了安全隐患排查整治工作的各项基本内容&#xff0c;实现以安全隐患排查整治业务流为主线&#xff0c;处理流程简洁清晰、快速灵活&#xff1b;以排查整治流程为干线&#xff0c;快…

【Vue2】Component template should contain exactly one root element.

问题描述 [plugin:vite:vue2] Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.原因分析 这个错误通常是由于 Vue 组件的模板中包含多个根元素导致的。Vue 要求组件模板中只…

01-从JDK源码级别彻底剖析JVM类加载机制

文章目录 类加载运行全过程类加载器和双亲委派机制类加载器初始化过程双亲委派机制为什么要设计双亲委派机制&#xff1f;全盘负责委托机制自定义类加载器 打破双亲委派机制Tomcat打破双亲委派机制Tomcat自定义加载器详解模拟实现Tomcat的JasperLoader热加载 补充&#xff1a;H…

5路开关量转继电器 Modbus TCP远程I/O模块 YL95 RJ-45网络接口通信

特点&#xff1a; ● 五路开关量输入&#xff0c;五路继电器输出 ● 支持Modbus TCP 通讯协议 ● 内置网页功能&#xff0c;可以通过网页查询电平状态 ● 可以通过网页设定继电器输出状态 ● DI信号输入&#xff0c;DO输出及电源之间互相隔离 ● 宽电源供电范围&#x…

爬虫图片验证码处理

图片验证码处理 目前&#xff0c;很多网站为了防止爬虫爬取&#xff0c;登录时需要用户输入验证码。下面我们学习如何在爬虫程序中识别验证码。 其中包含验证码。 页面中的验证码图片对应一个<img>元素&#xff0c;即一张图片&#xff0c;浏览器加载完登录页面后&#…

java源码解析 - Iterator

定义 Iterator是一个泛型接口&#xff0c;里面分别定义了四个方法 boolean hasNext();E next();default void remove();default void forEachRemaining(Consumer<? super E> action); 其中hashNext()和next()方法在集合中经常用到&#xff0c;其在ArrayList中的实现如…

网络编程『socket套接字 ‖ 简易UDP网络程序』

&#x1f52d;个人主页&#xff1a; 北 海 &#x1f6dc;所属专栏&#xff1a; Linux学习之旅、神奇的网络世界 &#x1f4bb;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f324;️前言&#x1f326;️正文1.预备知识1.1.IP地址1.2.端口号1.3.端口号与进…

JVM 垃圾回收详解

前言 什么是垃圾? 垃圾是指运行程序中没有任何引用指向的对象&#xff0c;需要被回收。 内存溢出和内存泄漏 内存溢出&#xff1a;经过垃圾回收之后&#xff0c;内存仍旧无法存储新创建的对象&#xff0c;内存不够溢出。 内存泄漏&#xff1a;又叫“存储泄漏”&#xff0…

换热站数字孪生 | 图扑智慧供热 3D 可视化

换热站作为供热系统不可或缺的一部分&#xff0c;其能源消耗对城市环保至关重要。在双碳目标下&#xff0c;供热企业可通过搭建智慧供热系统&#xff0c;实现供热方式的低碳、高效、智能化&#xff0c;从而减少碳排放和能源浪费。通过应用物联网、大数据等高新技术&#xff0c;…

AXure的情景交互

目录 导语&#xff1a; 1.erp多样性登录界面 2.主页跳转 3.省级联动​编辑 4. 下拉加载 导语&#xff1a; Axure是一种流行的原型设计工具&#xff0c;可以用来创建网站和应用程序的交互原型。通过Axure&#xff0c;设计师可以创建情景交互&#xff0c;以展示用户与系统的交…

Golang 清晰代码指南 2

发挥可读性和可维护性软件的好处 - 第二部分 在编程复杂的世界中&#xff0c;函数是构建代码大厦的基石。在本文中&#xff0c;我们踏上了一段旅程&#xff0c;探索设计简洁、连贯且高度实用的函数的艺术。 函数&#xff1a;代码的基石 想象函数就像是熟练的工匠&#xff0c…