买卖股票的最佳时机①

2023-05-16

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

注意你不能在买入股票前卖出股票。

示例 1:

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
     注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。
示例 2:

输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

 

解法一:暴力枚举法

要计算最大利润,可以用暴力法直接计算出所有天数的股票收益,然后进行比较,求得利润最大的一天。

class Solution {
    public int maxProfit(int[] prices) {
        int x=0,y=0,z=0,result=0;
        for(int i=0;i<prices.length;i++)
        {
            x = prices[i];
            for(int j=i+1;j<prices.length;j++)
            {
                y = prices[j];
                z = y-x;
                result = z>result?z:result;
            }
        }
        if(result >0)
        {
            return result;
        } 
        else
            return 0;
    }
}

但是这个方法有多余计算步骤,双重for循环复杂度太高,时间复杂度为O(n^{2})

 

考虑到题目要求,要计算最大利润,也就是两天的利润差达到最大值,于是可以边计算差值的同时设置一个变量存储最小的一个,同时用一个变量存储前一个差值和当前差值较大的一个,这样就能将双重循环降至单重循环,复杂度降低为O(n)

public class Solution {

    public int maxProfit(int[] prices) {
        
        if (prices.length< 2) 
        {
            return 0;
        }

        int result = 0,min = prices[0];
        for (int i = 1; i < prices.length; i++) 
        {
            result = result>(prices[i]-min)?result:(prices[i]-min);
            min = min<prices[i]?min:prices[i];
        }
        return result;
    }
}

执行用时 :1 ms, 在所有 Java 提交中击败了99.99%的用户

内存消耗 :37.4 MB, 在所有 Java 提交中击败了77.72%的用户

                                                                                                                                                                                                                                                                                                                                                                                                                                                                            

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

买卖股票的最佳时机① 的相关文章

随机推荐

  • 海康威视相机标定、畸变矫正及AprilTag获取视觉标签三维信息

    海康威视相机标定 畸变矫正及AprilTag获取视觉标签三维信息 一 海康威视相机标定二 相机去畸变三 Apritag ros获得视觉标签的三维位置 一 海康威视相机标定 相机标定经调研共发现三种常用方式 xff1a 利用Matlab的ca
  • 如何切换Echarts主题

    一 打开Echarts官方文档 点击资源 gt 主题构建工具 进入到主题选择页面 二 选择默认主题 点击默认方案选择合适的主题 例如选择macarons xff0c 点击后右侧展示对应主题效果 三 应用主题 1 下载主题 点击下载主题 xf
  • C中strchr()函数用法

    strchr 函数包含于头文件 xff1a include lt stdio h gt 中 xff1b 函数原型为 xff1a char strchr char str char int c 函数功能为 xff1a 在字符串str中寻找字符
  • 切身经历,经理都慌了!云服务器连接成功蓝屏,桌面没有任何图标显示

    恢复了服务器数据 xff0c 结果服务器桌面任何东西都看不到了 xff0c 只有一个蓝色背景 xff0c 那一刻 xff0c 我心里是慌的 解决方案 xff1a 1 使用远程桌面 xff0c 输入您服务器IP地址登陆服务器 2 一个用户黑屏
  • KMP算法的理解

    串的模式匹配算法主要有两种 xff0c 一是简单模式匹配 xff0c 而是KMP算法 简单模式匹配算法很容易理解 xff0c 每一次从主串的第一个位置起和模式串的第一个字符开始比较 xff0c 如果相等就按照顺序一直比下去 xff0c 如果
  • 普利姆算法和克鲁斯卡尔算法求解最小生成树

    Q xff1a 最小生成树有什么用 xff1f A xff1a 譬如我要去五个城市旅游 xff0c 每两个城市之间可能有路也可能没有 xff0c 路的距离可能一样也可能不一样 xff0c 随机从一个城市出发 xff0c 我想要把每个城市走一
  • ES多个字段group by操作

    以下操作基于es6 8 第一种方式 这种方式查询出来的数据不是扁平化的 xff0c 而是一层套一层的 xff0c 比如字段一套字段二 GET 索引name 索引type search 34 size 34 0 34 aggregations
  • 整数反转

    给出一个 32 位的有符号整数 xff0c 你需要将这个整数中每位上的数字进行反转 示例 1 输入 123 输出 321 示例 2 输入 123 输出 321 示例 3 输入 120 输出 21 注意 假设我们的环境只能存储得下 32 位的
  • python批量爬取图片

    import requests import time import re 请求网页 header防止被禁止访问403 xff0c 伪装成浏览器 xff0c 不会被认为是python headers 61 39 User Agent 39
  • LeetCode罗马数字转整数

    罗马数字包含以下七种字符 I xff0c V xff0c X xff0c L xff0c C xff0c D 和 M 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如 xff0c 罗马数字 2 写做
  • STM32F407-跑马灯

    硬件准备 xff08 STM32F407ZGT6 xff09 1 初始准备 1 1打开Template模板 xff0c 在工程目录下新建HARDWARE文件夹 1 2 新建在HARDWARE路径中新建led c led h两个文件 xff0
  • LeetCode-括号匹配

    给定一个只包括 39 39 xff0c 39 39 xff0c 39 39 xff0c 39 39 xff0c 39 39 xff0c 39 39 的字符串 xff0c 判断字符串是否有效 有效字符串需满足 xff1a 左括号必须用相同类型
  • STM32F407-串口通信基本原理

    1 处理器与外部设备通信的两种方式 xff1a 并行通信 传输原理 xff1a 数据各个位同时传输 优点 xff1a 速度快 缺点 xff1a 占用引脚资源多 串行通信 传输原理 xff1a 数据按位顺序传输 优点 xff1a 占用引脚资源
  • STM32F407-串口数据传送

    一 串口基础 1 常用的串口相关寄存器 USART SR状态寄存器USART DR数据寄存器USART BRR波特率寄存器 2 串口操作相关库函数 xff08 省略入口参数 xff09 void USART Init 串口初始化 xff1a
  • 外观数组

    外观数列 是一个整数序列 xff0c 从数字 1 开始 xff0c 序列中的每一项都是对前一项的描述 前五项如下 xff1a 1 1 2 11 3 21 4 1211 5 111221 1 被读作 34 one 1 34 34 一个一 34
  • STM32F407-外部中断

    一 基本概念 STM32F4的每个IO都可以作为外部中断输入 STM32F4的中断控制器支持22个外部中断 事件请求 xff1a EXTI线0 15 xff1a 对应外部IO口的输入中断 EXTI线16 xff1a 连接到PVD输出 EXT
  • 杨辉三角①与②

    给定一个非负整数 numRows xff0c 生成杨辉三角的前 numRows 行 在杨辉三角中 xff0c 每个数是它左上方和右上方的数的和 示例 输入 5 输出 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 思路 xff1
  • wireshark 清空列表

    windows ctrl 43 shift 43 D mac ctrl 43 shift 43 D 操作后 xff1a
  • 二叉树最大深度与最小深度

    给定一个二叉树 xff0c 找出其最大深度 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数 说明 叶子节点是指没有子节点的节点 示例 xff1a 给定二叉树 3 9 20 null null 15 7 xff0c 3 9 20 15
  • 买卖股票的最佳时机①

    给定一个数组 xff0c 它的第 i 个元素是一支给定股票第 i 天的价格 如果你最多只允许完成一笔交易 xff08 即买入和卖出一支股票 xff09 xff0c 设计一个算法来计算你所能获取的最大利润 注意你不能在买入股票前卖出股票 示例