問題の説明
配列があり、\ iith要素が\ iith日の株式の価格であるとします。
あなたは売買するチャンスがあります。(株を購入した後にのみ販売することができます)。得られる最大の利益を計算するためのアルゴリズムを設計してください。
入力の説明:
配列を入力します
出力の説明:
最大の利益を出力します
例
例1
[1,4,2]と入力します
出力
3
ソリューション
分析
- 購入できるのは1回だけなので、データのトラバースは1回だけです。トラバースされた過去の低価格の記録を使用して、現在の価格で販売することで最大の利益を得ることができます。
最高のリターン=最高の販売価格-最低の購入価格。
方法
- トラバースされたレコードを通じて表示される過去の低価格、および現在の価格で販売することによって得られる最大の利益。
コード
// 思路1
public class Solution {
public int maxProfit(int[] prices) {
if (null == prices || prices.length == 0) {
return 0;
}
int profit = 0, buy = prices[0];
for (int i = 1; i < prices.length; i++) {
// 找历史出现的价格中目前最低的买入价格
buy = Math.min(buy, prices[i]);
// prices[i] - buy : 计算以当前价格卖出,获得的收益
// 找历史收益中的最大值
profit = Math.max(profit, prices[i] - buy);
}
return profit;
}
}
時間計算量分析:
O(M):配列をトラバースします
スペースの複雑さの分析:
O(1):追加のストレージスペースは使用されません。
テストしたい場合は、Niuke.comのリンクに直接アクセスしてテストを行うことができます