★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-etpvynss-me.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
Say you have an array for which the ith element is the price of a given stock on day i.git
If you were only permitted to complete at most one transaction (i.e., buy one and sell one share of the stock), design an algorithm to find the maximum profit.github
Note that you cannot sell a stock before you buy one.算法
Example 1:數組
Input: [7,1,5,3,6,4] Output: 5 Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5. Not 7-1 = 6, as selling price needs to be larger than buying price.
Example 2:微信
Input: [7,6,4,3,1] Output: 0 Explanation: In this case, no transaction is done, i.e. max profit = 0.
給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。this
若是你最多隻容許完成一筆交易(即買入和賣出一支股票),設計一個算法來計算你所能獲取的最大利潤。spa
注意你不能在買入股票前賣出股票。設計
示例 1:code
輸入: [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。
1 class Solution { 2 func maxProfit(_ prices: [Int]) -> Int { 3 if prices == nil || prices.count == 0 4 { 5 return 0 6 } 7 let counts = prices.count 8 var arr:Array = Array(repeating: 0, count: counts) 9 var minPrice = prices[0] 10 for i in 1..<counts 11 { 12 minPrice = (minPrice < prices[i]) ? minPrice : prices[i] 13 arr[i] = (arr[i - 1] > (prices[i] - minPrice)) ? arr[i - 1] : (prices[i] - minPrice) 14 } 15 return arr[counts-1] 16 17 } 18 }
20ms
1 class Solution { 2 func maxProfit(_ prices: [Int]) -> Int { 3 guard prices.count > 0 else { 4 return 0 5 } 6 7 var maxProfit = 0 8 var middleProfit = 0 9 for i in 1..<prices.count { 10 middleProfit = max(prices[i] - prices[i - 1] + middleProfit, 0) 11 maxProfit = max(maxProfit, middleProfit) 12 } 13 14 return maxProfit 15 } 16 }
16ms
1 class Solution { 2 func maxProfit(_ prices: [Int]) -> Int { 3 guard prices.count >= 2 else { 4 return 0 5 } 6 var dif = 0 7 var profit = 0 8 for i in 1..<prices.count { 9 dif = max(dif+prices[i]-prices[i-1],0) 10 profit = max(dif,profit) 11 } 12 return profit 13 } 14 }