leetcode刷题日记:121. Best Time to Buy and Sell Stock( 买卖股票的最佳时机)

题目给了我们一组数prices,其中prices[i]表示第i天的股票价格,需要我们求出买卖股票所能获得的最大收益。
我们的第一想法就是从算出每一种买卖股票的情况然后求出里面的最大值,这样我们就能得到最大收益是多少,但是这种情况过于复杂他需要考虑前一天和后面所有天的情况,这无疑是复杂的,因为我们可以大致算出时间复杂度是 O ( n 3 ) O(n^3) O(n3),这在问题规模较小时还可以接受一旦问题规模上升,所需要的时间也快速上升,我们需要找到一种更加快速的算法。
上面思路的代码。

int maxProfit(int* prices, int pricesSize) {
    int profit = 0;
    for(int i=0; i<pricesSize; i++){
        for(int j=i+1; j<pricesSize; j++){
            int x = prices[j]-prices[i];
            if(x>profit){
                profit = x; 
            }
        }
    }
    return profit;
}

我们想一下我们可以从哪些情况去进行优化呢?刚才我们想的是从前向后找,但是我们知道第i天的最大利润等于第i天的价钱减前i-1天中的最小值,我们这样的话求某一天的利润就不需要看很多情况只需要看一下前n-1天的最小值,这样的话时间复杂度就大大减小了,我们只需要更新前n-1天最小值就行了。

int maxProfit(int *prices, int pricesSize){
    int min = prices[0];
    int profit = 0;
    for(int i=1;i<pricesSize;i++){
        if(prices[i]<=min){
            min = prices[i];
        }else if(prices[i]-min>profit){
            profit = prices[i]-min;
        }
    }
    return profit;
}

运行结果截图:
在这里插入图片描述
上面这两种算法时间的差异主要在于第一种算法假定的是当前检查的是最小的,然后向后寻找可能比他大的,后面的都是未检查的,所以要每一种情况都检查,第二种算法是认为已经检查过的是最小的,当前检查的是最大的,我们对于最小元素的信息已知,不需要检查别的情况,在检查的过程种遇到比其更小的就更新最小的值,所以情况少时间效率高。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LLM(四)| Chinese-LLaMA-Alpaca:包含中文 LLaMA 模型和经过指令微调的 Alpaca 大型模型

论文题目&#xff1a;《EFFICIENT AND EFFECTIVE TEXT ENCODING FOR CHINESE LL AMA AND ALPACA》 ​论文地址&#xff1a;https://arxiv.org/pdf/2304.08177v1.pdf Github地址&#xff1a;https://github.com/ymcui/Chinese-LLaMA-Alpaca 一、项目介绍 通过在原有的LLaMA词…

Lua的Resty-Request库写的一个简单爬虫

文章目录 准备工作编写爬虫运行爬虫代码分析拓展功能总结 &#x1f389;欢迎来到AIGC人工智能专栏~Lua的Resty-Request库写的一个简单爬虫 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系列文章专栏&#xff1a;AIGC人工智…

Databend 与海外某电信签约:共创海外电信数据仓库新纪元

为什么选择 Databend 海外某电信面临的主要挑战是随着业务量的增加&#xff0c;传统的 Clickhouse Hive 方案在数据存储和处理上开始显露不足。 原来的大数据分析采用的 Clickhouse Hive 方案进行离线的实时报表。但随着业务量的上升后&#xff0c;Hive的数据存储压力变大&…

HTTP代理与SOCKS5代理,有什么区别?

在数字通信领域&#xff0c;数据安全和匿名性都是非常重要的指标。互联网的不断发展催生了几种协议&#xff0c;每种协议都有独特的优势和挑战。其中&#xff0c;SOCKS5 代理、HTTP代理最为广泛使用&#xff0c;下面给大家一起讨论&#xff0c;HTTP代理与SOCKS5代理&#xff0c…

[文件读取]coldfusion 文件读取 (CVE-2010-2861)

1.1漏洞描述 漏洞编号CVE-2010-2861漏洞类型文件读取漏洞等级⭐⭐漏洞环境VULFOCUS攻击方式 描述: Adobe ColdFusion是美国Adobe公司的一款动态Web服务器产品&#xff0c;其运行的CFML&#xff08;ColdFusion Markup Language&#xff09;是针对Web应用的一种程序设计语言。 A…

市场行情回暖、利好月来袭,Web3 广告业领头羊 Verasity 或迎爆发

随着区块链技术的普及和发展&#xff0c;越来越多的行业正在被区块链技术所重塑&#xff0c;例如金融、游戏行业等&#xff0c;而数字广告行业的结构和运作方式也正在被区块链技术所重塑。 众所周知&#xff0c;传统数字广告行业往往存在着信息不对称、广告欺诈、数字隐私等问题…

《008.SpringBoot之教务系统》【界面简洁功能简单】

《008.SpringBoot之教务系统》【界面简洁功能简单】 项目简介 [1]本系统涉及到的技术主要如下&#xff1a; 推荐环境配置&#xff1a;DEA jdk1.8 Maven MySQL 前后端分离; 后台&#xff1a;SpringBootMybatis; 前台&#xff1a;JSPBootStrap; [2]功能模块展示&#xff1a; 管…

顺序表和链表

目录 1.线性表 2.顺序表 2.1 概念及结构 2.2 接口实现 2.3 顺序表的问题及思考 3.链表 3.1 链表的概念及结构 3.2 链表的分类 3.3 链表的实现 3.4双向链表的实现 4.顺序表和链表的区别和联系 1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的…

OpenMediaVault控制台web页面密码重置

要重置 OpenMediaVault&#xff08;OMV&#xff09;Web 控制台的密码&#xff0c;可以使用 omv-firstaid 命令行工具中的相应选项。按照以下步骤进行操作&#xff1a; 以管理员权限登录到 OMV 的命令行界面&#xff08;通过 SSH 或直接登录&#xff09;。 ssh登陆到root用户 运…

在windows上利用vmware17 搭建centos7 mini版本服务器

安装centos7mini 修改名称和安装路径 也可以点击自定义硬件&#xff0c;进行硬件配置修改 设置内存 设置处理器 点击下图按钮进行设置 点击done 点击开始安装 点击设置root密码 设置成功&#xff0c;点击done &#xff0c;root密码设置的简单的话需要按两次done 等待安装完成…

软考系统分析师知识点集锦二:系统规划

一、系统规划的步骤 (1)初步调查:根据企业战略目标&#xff0c;分析企业现状以及系统运行状况。(2)确定系统目标:确定系统的服务范围质量等。(3)分析子系统的组成:做系统划分并指定子系统功能。(4)拟定系统的实施方案:分析子系统优先级,确定开发顺序。(5)进行可行性研究:编写可…

接口测试和功能测试有什么区别

本文主要分为两个部分&#xff1a; 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为什么要做&#xff1f; 第二部分&#xff1…

如何利用IP代理进行海外推广?

在当今数字化的时代&#xff0c;网络营销已经成为企业策略的重要组成部分。而对于进去海外市场的跨境玩家来说&#xff0c;海外的推广推广是重中之重。然而&#xff0c;在开展推广的过程中&#xff0c;我们常常会遇到各种挑战&#xff0c;如地域限制、访问速度慢等。 为了解决…

提前编译:AOT

JIT与AOT的区别 IT和AOT这个名词是指两种不同的编译方式&#xff0c;这两种编译方式的主要区别在于是否在“运行时”进行编译 (1)JIT&#xff0c;Just-in-time,动态(即时)编译&#xff0c;边运行边编译 在程序运行时&#xff0c;根据算法计算出热点代码&#xff0c;然后进行JI…

【LeetCode刷题-双指针】--674.最长连续递增序列

674.最长连续递增序列 class Solution {public int findLengthOfLCIS(int[] nums) {int n nums.length,i 0,j 0,res 0;while(j < n){if( j>0 && nums[j-1] > nums[j]){i j;}j;res Math.max(res,j - i);}return res;} }

工地环境监测系统,支持接入政府环保平台,扬尘噪声实时在线监测数据、联动自动控制、超标报警、数据分析等功能

智慧工地云平台源码 智慧工地系统全套源码 环境监测系统源码 随着我国城市的发展&#xff0c;对住宅等的建设要求不断提高&#xff0c;为了满足人民的需要&#xff0c;不断进行规划、建设&#xff0c;但与此同时由于施工、运输、设备、建筑材料、施工设备等因素的影响&#xff…

Vue向pdf文件中添加二维码

&#x1f680; 场景一&#xff1a;利用vue向pdf文件中写入二维码图片或其他图片 &#x1f680; 场景二&#xff1a;向pdf中添加水印 思路&#xff1a; 1、先通过url链接生成二维码&#xff0c;二维码存在于dom中 2、使用html2canvas库将二维码的dom转为一个canvas对象 3、根据c…

静态黑洞路由是什么作用,如何配置?

环境&#xff1a; 华三交换机 问题描述&#xff1a; 静态黑洞路由是什么作用&#xff0c;如何配置&#xff1f; 解决方案&#xff1a; 静态黑洞路由&#xff08;Static Blackhole Route&#xff09;是一种网络路由配置技术&#xff0c;用于将特定目的地的流量引导到一个黑洞…

【华为云IaaS基础三件套之----计算ECS、网络EIP、存储EVS】

MD[华为云IaaS基础三件套----计算、网络、存储] 华为云IaaS基础三件套之----计算ECS、网络EIP、存储EVS 说明: 这里只是简单从计算/网络/存储&#xff0c;进行介绍&#xff0c;阐明云上对于云下的优势&#xff1b;因ECS是三者综合&#xff0c;故最后说明。 1.网络----弹性公…

git分支管理以及不同git工作流对比

0、 单人开发场景 单人开发可能会出现的场景之一 如果多人协同开发我们则需要使用更加专业的工具Git&#xff08;分布式版本控制&#xff09; 1、多人协同工作使用git会出现什么问题? 代码冲突&#xff1a; 问题&#xff1a; 当多个开发者同时修改同一文件或同一行代码时…