Day06 LeetcodeP121买股票的最佳时机
本文最后更新于94 天前,其中的信息可能已经过时,如有错误请发送邮件到3091169959@qq.com

一、题目描述

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

提示:

  • 1 <= prices.length <= 105
  • 0 <= prices[i] <= 104

二、题目分析

本道题目难度偏简单,通过暴力遍历也是可以得到正确的答案,但毕竟现在不是比赛,还有时间思考,其实这道题就是一边更新最大盈利的同时,也要跟新最小股价。那么分析一下买卖股票的流程:

如果想盈利最多,那就是最低点买入,最高点抛售。

但这道题的限制就是只能买卖一次,如果你在当前节点买了,下一次遇到更低的价格就无法再次购入,同样的,你也没法保证最高点一定会出现在最低点后面,有可能最高点会比最低点先出现,那么该如何面对这种情况?

其实很简单,只要在比较当前最大盈利的同时,比较当前节点的价格,如果后续最大盈利更新的同时,比当前节点低的节点买入也能获取更大利益,这里带入的并不是整体视角,而是在每次遍历的时候站在当前节点的视角,这样就可以不用考虑最高点和最低点出现时机问题,而是只关注当前节点和未来节点之间的盈利关系。

三、代码实现


public class P121 {
	static class Solution {
	    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 {
	        		int profit = prices[i] - minPrice;
	        		if(profit > maxProfit) {
	        			maxProfit = profit;
	        		}
	        	}
	        }
	    	return maxProfit;
	    }
	}

	public static void main(String[] args) {
		int[] nums = {7,6,4,3,1};
		Solution solution = new Solution();
		int ans = solution.maxProfit(nums);
		System.out.println(ans);
	}
}

提交结果:

四、总结

easy,感觉写了和没写一样

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
//根据主题自动透明