『力扣每日一题15』:买卖股票的最佳时机

一、题目

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

二、思路解析

我们要明确需求,就是先找到数组中的最小值跟最大值。

因此,我们可以定义两个变量,min 代表最小值,直接定义为一个 Integer 的最大值即可,保证每个数至少小于或等于它,就可以替换掉它。

而 maxprofit 的定义同理。

接着我们开始遍历数组,只要小于 min 的都赋值给 min、大于 mixprofit 的都赋值给它,并做好条件判断。

最终的最大利润 maxprofit 也就等于 最大值减去最小值,然后返回即可。

三、完整代码

复制代码
class Solution {
    public int maxProfit(int[] prices) {
        int min = Integer.MAX_VALUE;
        int maxprofit = 0;

        for(int i = 0;i<prices.length;i++){
            if(prices[i]<min){
                min = prices[i];
            }else if(prices[i]-min>maxprofit){
            maxprofit = prices[i]-min;
            }
        }
            return maxprofit;

    }
}

以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!

相关推荐
云闲不收1 分钟前
垃圾回收——三色标记法(golang使用)
jvm·算法·golang
孞㐑¥8 分钟前
C++之红黑树
开发语言·c++·经验分享·笔记
菜鸟江多多10 分钟前
32x32热成像高斯滤波图像处理
图像处理·单片机·算法
阳洞洞21 分钟前
二叉树的层序遍历
数据结构·算法·leetcode·二叉树遍历·广度优先搜索
今天也要早睡早起22 分钟前
代码随想录算法训练营Day32| 完全背包问题(二维数组 & 滚动数组)、LeetCode 518 零钱兑换 II、377 组合总数 IV、爬楼梯(进阶)
数据结构·c++·算法·leetcode·动态规划·完全背包
字节旅行者37 分钟前
C++中如何使用STL中的list定义一个双向链表,并且实现增、删、改、查操作
开发语言·数据结构·c++·链表
搞程序的心海39 分钟前
用Scala玩转Flink:从零构建实时处理系统
开发语言·flink·scala
XiaoLeisj44 分钟前
【MyBatis】深入解析 MyBatis:关于注解和 XML 的 MyBatis 开发方案下字段名不一致的的查询映射解决方案
xml·java·spring boot·spring·java-ee·tomcat·mybatis
x66ccff1 小时前
[特殊字符] Pandas 常用操作对比:Python 运算符 vs Pandas 函数
开发语言·python·pandas
LLLLLindream1 小时前
数据结构之链表
数据结构·链表