买卖股票最大收益
假设你有一个数组,其中第 i 个元素是股票在第 i 天的价格。
你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。
解题思路:
由于只有一次买卖机会,只有先买才能卖。我们首先需要设定最初的一个买入值,然后判断之后的卖出值与买入值之差。并且还需要去重新设置买入值
JAVA语言实现:
/**
* 买卖股票最大收益
* 假设你有一个数组,其中第 i 个元素是股票在第 i 天的价格。
* 你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。
* 解题思路:
* 由于只有一次买卖机会,只有先买才能卖。我们首先需要设定最初的一个买入值,然后判断之后的卖出值与买入值之差。并且还需要去重新设置买入值
*/
public int maxProfit (int[] prices) {
// write code here
if (prices.length < 2) return 0;
int max = 0; //最大收益
int min = prices[0];//给定第一个数据为买入值
for (int i = 1; i < prices.length; i ++) { //从第二个值开始遍历
if (prices[i] - min > max) { //当第i个值与买入值之差大于当前的最大收益max时
max = prices[i] - min; //重新给最大收益max赋值
}
if (prices[i] < min){ //判断第i个数是否比设置的买入初值小,小则代表当前的第i个数才是买入的最佳时刻。
min = prices[i]; //重新赋值最佳买入值
}
}
return max;
}
Kotlin语言实现
/**
* 买卖股票最大收益
* 假设你有一个数组,其中第 i 个元素是股票在第 i 天的价格。
* 你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。
* 解题思路:
* 由于只有一次买卖机会,只有先买才能卖。我们首先需要设定最初的一个买入值,然后判断之后的卖出值与买入值之差。并且还需要去重新设置买入值
*/
private fun maxProfit(prices: IntArray): Int {
// write code here
if (prices.size < 2) return 0
var max = 0 //最大收益
var min = prices[0] //给定第一个数据为买入值
for (i in 1 until prices.size) { //从第二个值开始遍历
if (prices[i] - min > max) { //当第i个值与买入值之差大于当前的最大收益max时
max = prices[i] - min //重新给最大收益max赋值
}
if (prices[i] < min) { //判断第i个数是否比设置的买入初值小,小则代表当前的第i个数才是买入的最佳时刻。
min = prices[i] //重新赋值最佳买入值
}
}
println("最大收益为: $max")
return max
}
调用:
maxProfit(intArrayOf(5,1,3,10))
maxProfit(intArrayOf(5,3,1,10))
输出: