当前位置: 首页 > news >正文

【牛客刷题-算法】NC7 买卖股票的最好时机(一)

个人主页:清风莫追
系列专栏:牛客刷题——数据结构与算法
推荐一款面试、刷题神器牛客网:👉点击开始刷题学习👈

文章目录

  • 1.题目描述
  • 2.算法设计思路
  • 3.代码实现
  • 4.运行结果
  • 结束语:


1.题目描述

描述
假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益

  1. 你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天
  2. 如果不能获取到任何利润,请返回0
  3. 假设买入卖出均无手续费

数据范围 0 ≤ n ≤ 1 0 5 , 0 ≤ v a l ≤ 1 0 4 0 \le n \le 10^5 , 0 \le val \le 10^4 0n105,0val104
要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)

在这里插入图片描述
注:图片来自牛客网

2.算法设计思路

一种比较暴力的想法,因为一共只能进行一次买入和卖出,所以只要求每一天与后面所有天数股价的差值,然后从中找出差值(后面的股价 - 前面的股价)最大组合即可。这样的时间复杂度将达到 o ( n 2 ) o(n^2) o(n2)

这里介绍另一种更加简单的方法。我们可以在一次遍历股票价格的过程中,动态地维护一个记录往日最低股价的变量,并与当日的股价相比较,则得到当日卖出股票能拿到的最大利润。

举个例子,对于输入的股价序列[8,9,2,5,4,7,1],我们可以在遍历的过程中,像下面的表格一样从左往右地更新数据。这样的时间复杂度将为 o ( n ) o(n) o(n),空间复杂度为 o ( 1 ) o(1) o(1)

天数1234567
今日股价8925471
今日以前最低股价882222
今日卖出最高利润1-6325-1
历史最大利润(含今日)113355

3.代码实现

注:这里并不是完整代码,而只是核心代码的模式

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param prices int整型一维数组 
 * @param pricesLen int prices数组长度
 * @return int整型
 */

#define big 987654321 //第一天以前的往期最低股价不存在,将其表示为无穷大

int maxProfit(int* prices, int pricesLen ) {
    // write code here
    int min = big; //维持往期最低股价
    int max = 0; //维持截至今日的最高利润
    int t = 0; //当天的最大化利润
    for(int i = 0; i < pricesLen; i++){
        t = prices[i] - min;
        if(t > max){
            max = t;
        }
        if(prices[i] < min){
            min = prices[i];
        }
    }
    return max;
}

4.运行结果

成功通过!
在这里插入图片描述


结束语:

今天的分享就到这里啦,快来加入刷题大军叭!
👉点击开始刷题学习👈

在这里插入图片描述


感谢阅读

个人主页:清风莫追

CSDN话题挑战赛第2期
参赛话题:学习笔记

相关文章:

  • 牛客网面试必刷TOP101之——判断对称二叉树、求镜像二叉树与合并二叉树
  • JavaSE笔记(二)重制版
  • 【LabVIEW专题】LabVIEW 通过串口进行Modbus协议通信
  • 软件分享-
  • java扶贫平台计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  • 十年数据库专家,呕心力作MySQL技术精粹,薪资直涨3K其实很轻松
  • D. Empty Graph #813 div2
  • 02 NLP合集-神经网络从0开始推理-一个间的神经网路的预测-没有backforward的情况下
  • 驱动程序开发:SPI设备驱动
  • PostgreSQL - 基于pg_basebackup实现主从流复制
  • Java项目源码ssm+mysql实现进销存系统|仓库
  • 黑马瑞吉外卖之套餐信息的分页查询
  • 9.14 c++基础
  • python创建智能问答机器人
  • MyBatis的简介和核心的组件(映射器、执行器、SqlSession及其工厂)
  • [译] React v16.8: 含有Hooks的版本
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • gops —— Go 程序诊断分析工具
  • Koa2 之文件上传下载
  • Nodejs和JavaWeb协助开发
  • Promise面试题,控制异步流程
  • Python socket服务器端、客户端传送信息
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前言-如何学习区块链
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何用vue打造一个移动端音乐播放器
  • 使用Swoole加速Laravel(正式环境中)
  • 微信支付JSAPI,实测!终极方案
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 消息队列系列二(IOT中消息队列的应用)
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 整理一些计算机基础知识!
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (javascript)再说document.body.scrollTop的使用问题
  • (二十四)Flask之flask-session组件
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十六)Flask之蓝图
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转) Face-Resources
  • .net core 控制台应用程序读取配置文件app.config
  • .Net MVC4 上传大文件,并保存表单
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .net生成的类,跨工程调用显示注释
  • // an array of int
  • [04]Web前端进阶—JS伪数组
  • [Android Pro] AndroidX重构和映射
  • [ERROR] Plugin 'InnoDB' init function returned error