首页 > 编程语言 >编程题-买卖股票的最佳时机

编程题-买卖股票的最佳时机

时间:2024-12-25 18:55:22浏览次数:6  
标签:买卖 min int money 编程 最佳时机 prices 卖出 利润

题目:

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

解题一:

我们只需要遍历价格数组一遍,记录历史最低点,然后在每一天考虑这么一个问题:如果我是在历史最低点买进的,那么我今天卖出能赚多少钱?当考虑完所有天数之时,我们就得到了最好的答案。下面直接上代码:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        //先判断容器数组prices是否为空
        if(prices.empty()){
            return 0;
        }
        int min = prices[0];
        int money = 0;
        int sum = prices.size();
        for(int i =1; i<sum; i++){
            if(prices[i]<=min){
                min = prices[i];
            }
            else{
                if(prices[i]-min>=money){
                    money=prices[i]-min;
                };
            }
        }
        return money;
    }
};

需要注意的是在对int类型数据赋初始值时,可以设置int a = inf,即C++标准数据库中的无穷大值符号,或者int a = 1e9人为赋值一个1000000000很大的值,在进行判断时可以将if(a>b)c = a{};语句直接用C++标准数据库中的函数max(a,b)或者min(a,b)直接来选取a和b之间的最大值和最小值。

仅进行了n次遍历,因此算法的时间复杂度为O(N);占用了与prices容器数组的固定大小值,因此算法的空间复杂度为O(1)。

标签:买卖,min,int,money,编程,最佳时机,prices,卖出,利润
From: https://blog.csdn.net/qq_43287713/article/details/144703424

相关文章

  • 仓颉编程语言首次使用体验——windows下环境配置及入门
    仓颉编程语言是华为研发的一种静态强类型、编译型语言。注意这里的静态,强类型,编译型。同时符合这三个特性的常见语言有:C++RustGoSwiftJava(有区别,java编译为字节码)如果你熟悉上面这些语言,就可以立马了解对仓颉语言有一些感性的认识,这意味仓颉并不是像javascript,python这种语......
  • 深度解读:20 款常见 AI 代码生成工具,从功能特性到优劣势,全面掌握编程得力助手
    GitHubCopilot:由GitHub和OpenAI合作开发,基于GPT架构。集成到多种开发环境中,如VisualStudioCode、JetBrainsIDE等。根据用户输入的注释或部分代码自动生成代码补全建议,适用于多种编程语言,如Python、JavaScript、Java等。优点:可以快速生成大量常用代码片段,例......
  • C#Halcon联合编程动态生成显示窗口
    UI编辑界面.exe显示界面代码usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingHalco......
  • C# 基础语法详解:开启编程新世界
    C#作为一门功能强大、应用广泛的编程语言,深受开发者们的喜爱。今天,就来为大家详细剖析一下C#的基础语法,无论你是编程小白渴望入门,还是有一定基础想要查漏补缺,相信这篇文章都能助你一臂之力。一、变量与数据类型变量就像是一个个小盒子,用来存放数据。在C#中,声明变量时需......
  • C# 数据类型全解析:深入理解编程基石
    在C#编程的世界里,数据类型犹如大厦的基石,支撑着整个程序的构建与运行。对数据类型有透彻的理解,是编写高效、可靠代码的关键。本文将带您深入探索C#中的数据类型,揭示其奥秘与应用之道。一、值类型与引用类型的本质区别C#的数据类型总体上可分为值类型和引用类型,这一区分......
  • 实验7_文件应用编程
    task4 #include"stdio.h"intmain(){FILE*fp;fp=fopen("D:\\快捷访问\\下载\\实验7数据文件及部分代码\\实验7数据文件及部分代码\\data4.txt","r");inti=1,c=0;charch;if(!fp){printf("failtoopenfileto......
  • 【Java教程】Day4-14 面向对象编程(OOP): Classpath详解与Jar包使用指南
    在Java编程中,我们经常接触到classpath这一概念。虽然很多文章讨论了如何设置classpath,但其中大部分并不完全准确。在这篇文章中,我们将深入探讨classpath的作用、如何正确配置它、以及如何使用jar包来管理Java项目。  1.什么是Classpath?Classpath是JVM(Java虚拟机)用来查找......
  • OpenCL 编程步骤 5. 创建内存对象
    参考《AMDOpenCL大学教程》OpenCL内存对象就是一些OpenCL数据,这些数据一般在设备内存中,能够被拷入也能够被拷出。OpenCL内存对象包括buffer对象和image对象。Buffer对象:连续的内存块----顺序存储,能够通过指针、行列式等直接访问。Image对象:是2维或3维的......
  • 【AI编程助手系列】国产AI编程工具四大金刚之 腾讯云AI代码助手
    系列文章目录......
  • 【进阶编程】代理模式和适配模式的比较
    代理模式和适配器模式(AdapterPattern)都属于结构型设计模式,它们在某些方面有相似之处,都涉及到为其他对象提供间接访问和包装,但它们的核心目的是不同的。下面是对代理模式和适配器模式的详细比较:1.目的代理模式(ProxyPattern):代理模式的目的是通过一个代理对象来控制对......