面试经典150题——买卖股票的最佳时机

面试经典150题 day7

      • 题目来源
      • 我的题解
        • 方法一 暴力 (超时)
        • 方法二 动态规划
        • 方法三 动态规划 空间优化
        • 方法四 一次遍历

题目来源

力扣每日一题;题序:121

我的题解

方法一 暴力 (超时)

求每一对(prices[i],prices[j])的差值,最后得到最大差值。

时间复杂度:O( n 2 n^2 n2)
空间复杂度:O(1)

public class Solution {public int maxProfit(int[] prices) {int maxprofit = 0;for (int i = 0; i < prices.length - 1; i++) {for (int j = i + 1; j < prices.length; j++) {int profit = prices[j] - prices[i];if (profit > maxprofit) {maxprofit = profit;}}}return maxprofit;}
}
方法二 动态规划

使用一个n×2的dp表示某一天买与卖的最大利润。dp[i][0]表示第i天买入或不买的最大利润,dp[i][1]表示第i天卖或不卖的最大利润。

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

public int maxProfit(int[] prices) {int n=prices.length;int[][] dp=new int[n][2];//0表示买,1表示卖for(int i=0;i<n;i++){if(i==0){dp[i][0]=-prices[0];dp[i][1]=0;continue;}//当前买的最大利润   本次不买或者本次买的最大值dp[i][0]=Math.max(dp[i-1][0],-prices[i]);//当前卖的最大利润   本次卖或者本次不卖的最大值dp[i][1]=Math.max(dp[i-1][0]+prices[i],dp[i-1][1]);}return dp[n-1][1];
}
方法三 动态规划 空间优化

实际只和上一天的情况有关,因此将dp表优化为常量

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

public int maxProfit(int[] prices) {int n=prices.length;int dp_0=-prices[0];//买int dp_1=0;//卖for(int i=1;i<n;i++){int t=dp_0;//当前买的最大利润   本次不买或者本次买的最大值dp_0=Math.max(dp_0,-prices[i]);//当前卖的最大利润   本次卖或者本次不卖的最大值dp_1=Math.max(t+prices[i],dp_1);}return dp_1;
}
方法四 一次遍历

在历史最低点买的股票就好了!太好了,在题目中,只要用一个变量记录一个历史最低价格 minprice,就可以假设自己的股票是在那天买的。那么在第 i 天卖出股票能得到的利润就是 prices[i] - minprice。

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

public int maxProfit(int prices[]) {int minprice = Integer.MAX_VALUE;int maxprofit = 0;for (int i = 0; i < prices.length; i++) {if (prices[i] < minprice) {minprice = prices[i];} else if (prices[i] - minprice > maxprofit) {maxprofit = prices[i] - minprice;}}return maxprofit;
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

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

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

相关文章

Kalman滤波器的原理与实现

Kalman滤波器是一种用于估计系统状态的算法,其可以通过融合系统的动态模型和传感器测量值来提高状态估计的精度。其原理基于线性系统理论和最优估计准则,主要用于处理具有高斯噪声的线性系统。 以下是Kalman滤波器的基本原理和实现步骤: 系统动态模型:首先需要建立系统的动…

十八章 hive基础

1&#xff09; 表的分区 大数据开发数据量较大&#xff0c;在进行数据查询计算时&#xff0c;需要对数据进行拆分&#xff0c;提升查询速度。 1-1 单个分区 单个分区时创建单个目录 1-2 多个分区 多个分区可以将数据拆分多个目录储存 注意点&#xff1a; 1 分组字段不能…

Win10 启动时数字键盘不亮怎么办?

首先&#xff0c;按住winr 运行 windows 运行框&#xff0c;输入regedit 打开注册表编辑器 1.查找current_user选项下的Control Panel 中的keyboard 点击八initialkeyboard 值设置成2&#xff0c;如图所示即可。2.选择hkey_user 中的。default 下的control Panel 选项下的keyb…

mysql断电后无法启动

1、配置/etc/my.cnf innodb_force_recovery6(这个值越小越安全,最开始建议设置为1&#xff0c;如果也无法启动再改为2&#xff0c;以此内推)1 (SRV_FORCE_IGNORE_CORRUPT)&#xff1a;即使服务器检测到损坏的页仍让它运行。试图使SELECT* FROM tbl_name跳过损坏的索引记录和页…

JavaScript事件循环

JavaScript是单线程&#xff0c;&#xff08;通常用来操作DOM&#xff0c;如果改为多线程&#xff0c;一个线程进行了1删除&#xff0c;另一个添加了DOM&#xff0c;那么浏览器该怎么处理&#xff09; 在JavaScript中&#xff0c;所有任务都可分为 同步任务&#xff1a;立即执…

美易官方:道指六连阴!美国股债双杀背后

美国股市和债市近期遭遇了罕见的双重打击&#xff0c;道指连续六个交易日下跌&#xff0c;引发市场广泛关注。这一现象背后&#xff0c;是否又上演了某一“魔咒”&#xff1f;本文将从多个角度对此进行深入分析。 道指罕见创下六连阴、标普500指数迎来硅谷银行危机以来最大两日…

工作中用Redis最多的10种场景

作者&#xff1a;苏三说技术 链接&#xff1a;https://juejin.cn/post/7325132133168971813 前言 Redis是一种非常优秀的基于KV的键值对缓存数据库&#xff0c;有非常不错的性能和稳定性&#xff0c;无论是在工作中&#xff0c;还是在面试中&#xff0c;都经常会出现。因此&am…

村庄规划中基础地理数据的获取、处理与应用

文章目录 一、三调数据1. 地类图斑2. 村级调查区二、调查数据1. 宅基地确权数据2. 公益林数据三、公开数据1. 卫星影像2. 数字高程模型3. 国家地理信息服务平台4. 其他数据一、三调数据 三调数据,是对现状土地利用情况的全面调查。成果数据以数据库的形式存储、组织与管理。具…

UC网盘、迅雷网盘拉新如何做?热门拉新项目盘点

迅雷网盘拉新项目&#xff1a; ​关键词链接 双重拉新模式&#xff1a;可以通过链接、关键词两种方式进行推广&#xff0c;匹配不同拉新场景。 网盘功能齐全&#xff1a;作为老牌网盘产品&#xff0c;功能强大&#xff0c;使用体验好&#xff0c;支持不同格式文件。 不限推广…

【七 (2)FineBI FCP模拟试卷-平台新增用户留存分析】

目录 文章导航一、字段解释1、用户平台登录信息表格2、用户平台激活信息表格 二、需求三、操作步骤1、建立用户平台登录信息表格和用户平台激活信息表格的关联关系2、将用户平台激活信息表格的激活日期添加到用户平台登录信息表格3、新增公式列&#xff0c;计算激活时间和登录时…

OpenHarmony轻量系统开发【5】驱动之GPIO点灯

5.1点灯例程源码 先看最简单得LED灯闪烁操作 源码结构如下&#xff1a; 第一个BUILD.gn文件内容&#xff1a; static_library("led_demo") {sources ["led_demo.c"]include_dirs ["//utils/native/lite/include","//kernel/liteos_m/c…

工业物联网让“制造”变成“智造”!——青创智通

工业物联网解决方案-工业IOT-青创智通 随着科技的不断进步和工业的持续发展&#xff0c;物联网&#xff08;IoT&#xff09;技术的出现为制造业带来了前所未有的变革。工业物联网&#xff08;IIoT&#xff09;作为物联网技术在工业领域的应用&#xff0c;正在逐渐改变传统的制…

@Transactional使用中的三类坑

我们知道事务有声明式事务和编程式事务两种&#xff0c;编程式事务代码侵入较高&#xff0c;声明式事务侵入较低&#xff0c;在项目中常有使用&#xff0c;然而&#xff0c;不正确的使用声明式事务&#xff0c;可能让代码未能按照我们的预期执行。 一、事务可能没有生效 Tran…

概念:Android 虚拟机

Android中的Dalvik虚拟机&#xff08;DVM&#xff09;和Android运行时&#xff08;ART&#xff09;都是运行在内存中的。它们是Android操作系统的一部分&#xff0c;为Android应用提供了一个管理执行代码的环境。具体来说&#xff1a; Dalvik虚拟机 (DVM)&#xff1a;Dalvik是…

2024-4.python4基本数据类型

基本数据类型 引言 提问 前面我们说过&#xff0c;计算机的本质作用就是用来存储和运算二进制的数据。但是在实际应用中&#xff0c;我们看到计算机存储或者运算的数据并非只有二进制的数据&#xff0c;例如使用Excel可以对一些数值数据、文本数据或者图像数据进行不同形式的处…

从iPhone恢复已删除照片的最佳软件

本文分享了从iPhone恢复已删除照片的最佳软件。如果您正在寻找如何从iPhone恢复已删除的照片&#xff0c;请查看这篇文章。 为什么您需要软件从iPhone恢复已删除的照片&#xff1f; 没有什么比丢失iPhone上的重要数据更痛苦的了&#xff0c;尤其是一些具有珍贵回忆的照片。有时…

从零开始学习深度强化学习及其在自动驾驶下的实战项目

深度强化学习及其在自动驾驶下的实战项目 本课程是为了帮助大家快速入门强化学习和学会应用深度强化学习进行算法的开发。 鉴于网上有许多开源的强化学习理论基础的视频&#xff0c;而且许多项目都是基于gym游戏进行开发的简单项目&#xff0c;并未涉及使用前沿的carla环境等自…

公司文件加密软件有监视功能吗?

公司文件加密软件不仅提供了强大的文件加密能力&#xff0c;还具备了监视功能&#xff0c;确保文件在使用过程中的安全性。华企盾DSC数据防泄密系统中的监控功能体现在以下几个方面&#xff1a; 加密文件操作日志&#xff1a;记录所有加密文件的申请、审批、扫描加解密、自动备…

Jvm垃圾回收器cms和g1区别

Jvm垃圾回收器cms和g1区别 G1垃圾回收器&#xff08;Garbage First&#xff09;和CMS &#xff08;Concurrent Mark-Sweep&#xff09;垃圾回收器是Java虚拟机&#xff08;JVM&#xff09;&#xff09;中的两种不同的垃圾回收策略&#xff0c;它们各有优缺点。以下是两者的比较…

【Camera2 教程二】Camera2相机打开和关闭接口调用详细说明

上一章《Camera2教程一》里我们介绍了一些 Camera2 的基础知识,但是并没有涉及太多的 API,从本章开始我们会开发一个具有完整相机功能的应用程序,并且将相机知识分成多个篇章进行介绍,而本章所要介绍的就是相机的开启流程。 阅读本章之后,你将学会以下几个知识点: 如何…